C 有人能给我解释一下为什么这个代码会给我一个Seg故障吗。?

C 有人能给我解释一下为什么这个代码会给我一个Seg故障吗。?,c,segmentation-fault,C,Segmentation Fault,有人能给我解释一下为什么这个代码会给我一个seg故障吗 char cmd[MAXSIZE]; char* args[2]; fgets(cmd, MAXSIZE, stdin); // read_line(cmd); char* cmdPt = cmd; printf(cmdPt[0]); 然后当我: printf("%c", cmdPt[0]) 这并不是我的seg的错 问题出在printf()语句中 printf(cmdPt[0])应为printf(cmdPt) 因为printf()第一

有人能给我解释一下为什么这个代码会给我一个seg故障吗

char  cmd[MAXSIZE];
char* args[2];
fgets(cmd, MAXSIZE, stdin);
// read_line(cmd);
char* cmdPt = cmd;
printf(cmdPt[0]);
然后当我:

printf("%c", cmdPt[0])

这并不是我的seg的错

问题出在
printf()
语句中

printf(cmdPt[0])应为
printf(cmdPt)
因为
printf()
第一个参数是
const char*format
,即您应该提供字符数组基址,而不是单个字符

正确阅读编译器警告,您可以找到自己的解决方案

应为“const char*restrict”,但参数的类型为“char”


最好将
printf()
与格式字符串一起使用。正如评论中所建议的,您应该始终使用标志
-Wall-pedantic errors
编译代码,这对您很有帮助。

cmdPt[0]
的类型是什么?第一个参数
printf
的类型是什么?如果没有格式字符串,请不要使用printf()!想想如果你正在打印的字符串包含格式说明符会发生什么……更好的是,使用
-pedantic errors
编译,这些一致性警告将变成错误。我没有得到@StoryTeller。你想说如果我使用
-pedanticerrors
选项编译,警告就会变成错误吗?我明白了,
-Wall
是否足以表示警告。该警告是表示程序违反ISO C约束的众多警告之一。但是警告可以被忽略(如果它们在默认情况下出现的话)。为了获得严格的一致性,我喜欢添加
-pedanticerrors
标志。它比
-Werror
(这在我看来有点太严格了)。@alk-你或我会修复这些警告。学习者(比如OP)不会。最好从错误开始,轻松养成好习惯。@StoryTeller:很公平。我最喜欢的选项是:
-Wall-Wextra-pedantic-Wconversion
。后者更多的是为了再次检查我个人在混音方面的马虎。我只在个案基础上修复它警告的代码。我不在生产构建中使用它。