我正在尝试做一个FLAMES程序作为一项任务,由于我无法在此处准确地发布整个代码,因此我会键入似乎会导致我出错的代码部分,因为每当我打印出一些东西时,输出中会出现意外的多余字符。
我使用了与此类似的代码:
int main(){
char chari[100], temp[100];
int i, c;
printf("Enter a name: \n");
scanf(" %[^\n]s", chari);
for (i=1; chari[i]!='\0'; i++)
{
printf("%i\n", i);
}
c = i;
for (i=0; i<c; i++)
{
printf("%i < %i\n", i, c);
temp[i] = chari[i];
}
printf("%s \n", temp);
return 0;
}
我已经调整了几个小时的代码,但似乎仍然找不到问题。我还要计算字符串中的字母数,以便以后可以停止程序的某些部分。
输入:很酷
预期输出:很酷
实际输出:很酷(<-t
答案 0 :(得分:2)
您忘记复制终止的空字符。
第一次循环后,c = i;
保留0字节的索引。
在第二个循环中,您运行到i < c
,即您不复制该0字节
在不终止nul的情况下,您的字符串只要在内存中找到另一个随机0字节即可。
在一个函数中,仅静态变量被初始化。因此,您的temp
数组拥有不确定的值,并且您不能依赖在需要的地方获取0字符。
您需要再复制1个字节。