now*_*ngC 1 c arrays casting kernighan-and-ritchie segmentation-fault
我最近选择了C编程语言(第2版)并且一直在研究本书中的例子.阵列给我带来了麻烦.具体来说,它似乎与类型铸造有关.1.6节示例读取输入,然后计算属于某些类别的字符数.当我通过可执行文件管道源代码时,这段代码似乎创建了一个段错误,此外还没有正确捕获任何数字字符.如果我使用标准输入和^ D到EOF,那么它根本不会捕获数字而是将它们计为其他字符(尽管没有段错误).
while ((c=getchar())!=EOF)
if(c>='0'&&c>='9')
++ndigit[c-'0'];
Run Code Online (Sandbox Code Playgroud)
我已经消除了它是程序的另一部分的可能性,通过交换其他部分导致故障,但如果它有帮助我仍然可以发布其余部分.根据我的理解,这个循环应该通过输入中的单个字符.如果它们具有0到9之间的值,则它将字符转换为数字(对应于ndigit数组位置0-9)并将该数组位置增加1.
K&R 2e是否已经过时了?字符编码(ASCII与Unicode)在将字符数转换为整数时是一个问题吗?任何意见,将不胜感激.
我不知道如何检查我的编码(如果它甚至重要)但我的编译器是gcc(Ubuntu/Linaro 4.7.3-1ubuntu1)4.7.3
if(c>='0'&&c>='9')
Run Code Online (Sandbox Code Playgroud)
那你的意思是:
if(c>='0'&&c<='9')
Run Code Online (Sandbox Code Playgroud)
另外请检查c
是否正确声明类型int
而不是char
.