繁体   English   中英

在C中为字符数组赋值时,为什么整数数组元素包含错误的值,并且该如何解决?

[英]Why do my integer array elements contain the wrong values when I assign it character values in C and how can I fix this?

我写了以下代码:

#include <stdio.h>
#include <string.h>
int main()
{
    char *string = "abcd";
    int i;int j;
    int array[5];
    for(i=0; i<strlen(string); i++)
       array[i] = string[i];  
    for(j=0; j<4; j++)
      printf("array[i] %d\n",array[i]);


     array[0] = string[0]; 
     printf("array[0] %d\n",array[0]);


return 0;
}

我得到以下输出:

array[i] 4195888
array[i] 4195888
array[i] 4195888
array[i] 4195888
array[0] 97

我认为输出将是:

array[i] 97
array[i] 98
array[i] 99
array[i] 100
array[0] 97

如果此作业:

array[0] = string[0];

将97分配给array [0],那么为什么要在循环中进行类似的分配,产生不同的输出,又该如何修复我的代码,以使输出看起来像我期望的那样?

问题是索引值不匹配。

for(j=0; j<4; j++)
      printf("array[i] %d\n",array[i]);

应该

for(j=0; j<4; j++)                       // j is the loop control variable
      printf("array[j] %d\n",array[j]);  // so, use j as index here

否则,将使用i的最后一个值作为索引,这是在尝试访问包含不确定值的未初始​​化元素(即array[4] )。 这会调用未定义的行为

为了安全起见,最好将局部变量初始化为函数。

如前所述,您的printf循环在j上,但是您将i用作数组的索引,而应该使用j进行索引。 您还已经在printf中对j进行了硬编码,应该将其%d然后用j填充。

#include <stdio.h>
#include <string.h>
int main()
{
    char *string = "abcd";
    int i;int j;
    int array[5];
    for(i=0; i<strlen(string); i++)
       array[i] = string[i];  
    for(j=0; j<4; j++)
      printf("array[%d] %d\n",j,array[j]);


     array[0] = string[0]; 
     printf("array[0] %d\n",array[0]);


return 0;
}

然后您的输出将如预期的那样:

array[0] 97
array[1] 98
array[2] 99
array[3] 100
array[0] 97

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM