你能解释一下这个C程序的输出吗? #包括 #包括 main(){ int i=0,j=0; char ch[]={“鸡肉好”}; char-str[100]; while((str[i++]=ch[j++])!='\0'){ 如果(i==strlen(str)) 打破 } printf(“%s”,str); }
我想使用你能解释一下这个C程序的输出吗? #包括 #包括 main(){ int i=0,j=0; char ch[]={“鸡肉好”}; char-str[100]; while((str[i++]=ch[j++])!='\0'){ 如果(i==strlen(str)) 打破 } printf(“%s”,str); },c,C,我想使用while循环将字符串“chicken is good”从ch复制到str。但是当我打印str时,输出显示“chi”。它只打印字符串的一部分。我的情况不对吗 < >我使用DEV C++作为IDE,编译器的版本是GCC 4.92.我也是编程新手。strlen(str)有未定义的行为,因为它正在读取未初始化的值。strlen(str)有未定义的行为,因为它正在读取未初始化的值。如果(I==strlen(str))语句中断无效且具有未定义的行为 请注意,您的程序还有其他问题: 必须将main
while
循环将字符串“chicken is good”
从ch
复制到str
。但是当我打印str
时,输出显示“chi”
。它只打印字符串的一部分。我的情况不对吗
< >我使用DEV C++作为IDE,编译器的版本是GCC 4.92.我也是编程新手。strlen(str)
有未定义的行为,因为它正在读取未初始化的值。strlen(str)
有未定义的行为,因为它正在读取未初始化的值。如果(I==strlen(str))语句中断由于str
尚未以null结尾,因此code>无效且具有未定义的行为
请注意,您的程序还有其他问题:
- 必须将
函数的返回值指定为main
。您使用的是过时的语法int
- 源数组和目标数组不需要单独的索引变量
和i
。它们总是具有相同的值j
- 您应该在邮件末尾打印换行符
- 要获得良好的样式,应在
的末尾返回main()
0
#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);
}
#包括
内部主(空){
int i;
char ch[]=“鸡肉好”;
char-str[100];
对于(i=0;(str[i]=ch[i])!='\0';i++){
继续;
}
printf(“%s\n”,str);
返回0;
}
如果(i==strlen(str))中断,则语句由于str
尚未以null结尾,因此code>无效且具有未定义的行为
请注意,您的程序还有其他问题:
- 必须将
main
函数的返回值指定为int
。您使用的是过时的语法
- 源数组和目标数组不需要单独的索引变量
i
和j
。它们总是具有相同的值
- 您应该在邮件末尾打印换行符
- 要获得良好的样式,应在
main()
的末尾返回0
以下是一个更简单的版本:
#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);
}
#包括
内部主(空){
int i;
char ch[]=“鸡肉好”;
char-str[100];
对于(i=0;(str[i]=ch[i])!='\0';i++){
继续;
}
printf(“%s\n”,str);
返回0;
}
Deleteif(i==strlen(str))break
我得到了@bluepixydeteif(i==strlen(str))break
我得到了@bluepixy感谢你详尽的回答并显示了我所有的缺陷@chqrlie感谢你详尽的回答并显示了我所有的缺陷@chqrlie