你能解释一下这个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;
}

Delete
if(i==strlen(str))break
我得到了@bluepixydete
if(i==strlen(str))break
我得到了@bluepixy感谢你详尽的回答并显示了我所有的缺陷@chqrlie感谢你详尽的回答并显示了我所有的缺陷@chqrlie