str[20]和20[str]
代码#include <stdio.h>
int main() {
char str[] = "I love FishC.com!What about your?";
printf("%s \n%s\n", str, 20 );
return 0;
}
小甲鱼原话:2. 请问 str 是否可以写成 20?
答:可以。
结果:gcc test5.c && ./a.out
段错误 (核心已转储)
有哪位鱼油可以解释一下吗? 这段代码的问题出在printf函数的参数中。str和20都是单个字符,但是在printf函数的参数中使用了%s,它会尝试输出一个字符串,因此会出现段错误。
str表示字符串str中下标为20的字符,而20也可以表示相同的字符,因为在C语言中,str等价于*(str+20),而20等价于*(20+str),由于加法满足交换律,因此它们都可以表示字符串str中下标为20的字符。 首先,我们来解释一下代码中的两个表达式:str 和 20。
在 C 语言中,数组下标运算符 [] 的实际工作原理是通过指针运算来实现的。当我们使用 str 时,实际上是在执行 *(str + 20)。同样,20 实际上是在执行 *(20 + str)。由于加法运算是可交换的,所以这两个表达式是等价的。
然而,这段代码中存在一个问题,导致了段错误(segmentation fault)。段错误通常是由于程序试图访问非法内存区域而引发的。在这个例子中,str 是一个字符数组,其长度为 25(包括空字符 '\\0')。当我们尝试访问 str 或 20 时,我们实际上是在访问数组范围之外的内存,这可能导致段错误。
此外,printf 函数的格式字符串中使用了 %s,它期望接收一个以空字符 '\\0' 结尾的字符串指针。但是,str 和 20 都是字符类型(char),而不是字符串指针。这也可能导致未定义行为和段错误。
为了解决这个问题,你可以将代码修改为:
#include <stdio.h>
int main() {
char str[] = \"I love FishC.com!What about your?\";
printf(\"%c \
%c\
\", str, 20 );
return 0;
}
这里,我们将 printf 的格式字符串中的 %s 改为 %c,以便正确地输出字符。这样,程序应该可以正常运行并输出两个字符。
如果问题已经解决,请设置最佳答案 isdkz 发表于 2023-10-3 16:23
这段代码的问题出在printf函数的参数中。str和20都是单个字符,但是在printf函数的参数中使用了%s ...
等等,对诶! isdkz 发表于 2023-10-3 16:23
这段代码的问题出在printf函数的参数中。str和20都是单个字符,但是在printf函数的参数中使用了%s ...
抱歉,看到str就打了个%s 陶远航 发表于 2023-10-3 16:24
首先,我们来解释一下代码中的两个表达式:str 和 20。
在 C 语言中,数组下标运算符 [] 的实际工 ...
感谢你的回答{:10_279:}
——但为什么我没看到{:10_244:}!!!
诶,也对只有刷新才看得到......{:10_284:} 风眠 发表于 2023-10-3 16:27
感谢你的回答
——但为什么我没看到!!!
诶,也对只有刷新才看得到......{:10 ...
没事没事 陶远航 发表于 2023-10-3 16:27
没事没事
对了为什么我收到了提示
屏蔽3 分钟前
Mike_python小 回复了您的帖子 str和20 查看
但我这儿看不到他的消息呢? 风眠 发表于 2023-10-3 16:29
对了为什么我收到了提示
但我这儿看不到他的消息呢?
不知道 这个: 算BUG吗? 风眠 发表于 2023-10-3 16:32
算BUG吗?
他脚本没调试好吧{:10_277:} 陶远航 发表于 2023-10-3 16:33
他脚本没调试好吧
什么意思? 风眠 发表于 2023-10-3 16:34
什么意思?
没事,就是一个Bug而已 好的,已经去问了 风眠 发表于 2023-10-3 16:37
好的,已经去问了
他可能删了 liuhongrun2022 发表于 2023-10-3 16:51
他可能删了
为啥要删呢
页:
[1]