#include <stdio.h>
#include <string.h>
main() {
int i = 0, j = 0;
char ch[] = { "chicken is good" };
char str[100];
while ((str[i++] = ch[j++]) != '\0') {
if (i == strlen(str))
break;
}
printf("%s", str);
}
我想使用"chicken is good"
循环将字符串ch
从str
复制到while
。但是当我打印str
时,输出会显示"chi"
。它只打印部分字符串。我的病情错了吗?
我使用Dev c ++作为我的IDE,我的编译器版本是gcc 4.9.2。而且我也是编程新手。
答案 0 :(得分:3)
语句if (i == strlen(str)) break;
没用,并且由于str
尚未终止,因此行为未定义。
请注意,您的程序还有其他问题:
main
函数的返回值指定为int
。您使用的是过时的语法。i
和j
。它们总是具有相同的价值。0
的末尾返回main()
。这是一个更简单的版本:
#include <stdio.h>
int main(void) {
int i;
char ch[] = "chicken is good";
char str[100];
for (i = 0; (str[i] = ch[i]) != '\0'; i++) {
continue;
}
printf("%s\n", str);
return 0;
}
答案 1 :(得分:2)
strlen(str)
有未定义的行为,因为它正在读取未初始化的值。