C 为什么这段代码没有';你不能换绳子吗?
我正在研究C语言中的字符串操作,我不明白为什么语句C 为什么这段代码没有';你不能换绳子吗?,c,string,C,String,我正在研究C语言中的字符串操作,我不明白为什么语句s1[I]=s1[++I]不会用下一个字符e替换第一个H。看看代码: #include <stdio.h> main() { char s1[] = "Hello world !"; for(int i = 0; s1[i] != '\0'; ++i) s1[i] = s1[++i]; printf("%s", s1); } #包括 main() { char s1[]=“你好,世界!”; 对于(int i=0
s1[I]=s1[++I]
不会用下一个字符e
替换第一个H
。看看代码:
#include <stdio.h>
main()
{
char s1[] = "Hello world !";
for(int i = 0; s1[i] != '\0'; ++i)
s1[i] = s1[++i];
printf("%s", s1);
}
#包括
main()
{
char s1[]=“你好,世界!”;
对于(int i=0;s1[i]!='\0';++i)
s1[i]=s1[++i];
printf(“%s”,s1);
}
它打印你好,世界
而不是el r
您的程序在这条语句中
s1[i] = s1[++i];
i
在序列点之间修改两次(赋值运算符=
不引入序列点)
gcc(gcc-Wall-Wextra
)警告:
warning: operation on ‘i’ may be undefined [-Wsequence-point]
类似地,叮当声警告:
warning: unsequenced modification and access to 'i' [-Wunsequenced]
您的程序在该语句中具有
s1[i] = s1[++i];
i
在序列点之间修改两次(赋值运算符=
不引入序列点)
gcc(gcc-Wall-Wextra
)警告:
warning: operation on ‘i’ may be undefined [-Wsequence-point]
类似地,叮当声警告:
warning: unsequenced modification and access to 'i' [-Wunsequenced]
启用编译器警告并注意它们。编译器是你的朋友
此警告的含义:
在C语言中没有规则规定应该首先评估作业的哪一边。在这种情况下,似乎是首先对右侧进行求值,但通常结果是未定义的
启用编译器警告并注意它们。编译器是你的朋友
此警告的含义:
在C语言中没有规则规定应该首先评估作业的哪一边。在这种情况下,似乎是首先对右侧进行求值,但通常结果将是未定义的。因为
s1[i]=s1[++i]代码>是未定义的行为。@Phylogenesis哦,好吧,太棒了,我认为++I只对s1[++I]重要,而不是对整个语句。可能是@XING的重复,并且将与原始语句一样未定义。因为s1[I]=s1[++I]代码>是未定义的行为。@Phylogenesis哦,好吧,太棒了,我认为++我只对s1[++I]重要,对整个语句不重要。可能是@XING的重复,并且将与原始的一样未定义。我没有关于cc
的警告消息,这很奇怪。@screedabs你在使用哪种编译器?确保使用-Wall标志或编译器的等效标志运行(请参阅特定编译器的手册)。没有警告的编程是危险和不必要的。我没有带有cc
的警告消息,这很奇怪。@screedgedabs您使用的是哪种编译器?确保使用-Wall标志或编译器的等效标志运行(请参阅特定编译器的手册)。没有警告的编程是危险和不必要的。-Wextra没有必要获得此警告,但仍然是可取的。-Wextra没有必要获得此警告,但仍然是可取的。