当我在C中分配字符值时,为什么我的整数数组元素包含错误的值,以及如何修复此值



我写了以下代码:

#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] %dn",array[i]);

     array[0] = string[0]; 
     printf("array[0] %dn",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分配给数组[0],然后为什么在循环中进行类似的作业,产生不同的输出,我该如何修复代码,以使输出看起来像我所期望的?

问题是不匹配的索引值。

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

应该是

for(j=0; j<4; j++)                       // j is the loop control variable
      printf("array[j] %dn",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] %dn",j,array[j]);

     array[0] = string[0]; 
     printf("array[0] %dn",array[0]);

return 0;
}

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

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

最新更新