gpt4 book ai didi

c - 为什么将 int(0) 分配给字符串索引会结束循环?

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:58 25 4
gpt4 key购买 nike

这是我遇到的一个难题。

编译时没有错误:

$gcc -Wall -Wextra -pedantic -std=c99

您能解释一下为什么在 C 语言中会发生这种情况吗?

预期:

打印出str[i]处的index和char并替换

输出:

如果我尝试将 str[i] 重新分配给 0,它会作为 for 循环的中断。

    char str[] = "this is only a test";
for(int i = 0; i < (int)strlen(str); i++) {
printf("str[%d] = %c\n", i, str[i]);
if(str[i] == ' ') {
str[i] = 0;
}
}

最佳答案

您的程序运行良好(假设您包含了 string.h )- 当它找到空间时 ' '作为字符,它将第 ith<​​/strong> 索引设置为 \0下次什么时候strlen计算长度,发现i<(int)strlen (它发现在早期位置终止)被违反并且循环终止。

这是 GCC 上的输出,没有任何警告/错误:

 str[0] = t
str[1] = h
str[2] = i
str[3] = s
str[4] =

唯一的问题是,它不会打印整个字符串,因为当您找到空格字符时,您替换它会空终止,下次 strlen条件被违反并且它从循环中出来。

为了打印整个字符串,最好使用一个变量并用字符串的长度对其进行初始化,然后将该变量用作条件:

 unsigned length = strlen(str);
for(int i = 0; i < length; i++)

另外,您不需要类型转换 strlen的返回值为 int .

关于c - 为什么将 int(0) 分配给字符串索引会结束循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52450260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com