繁体   English   中英

c segfault直接来自教科书

[英]c segfault straight from the textbook

我最近学习了《 The C Programming Language》(第二版),并一直在努力完成本书中的示例。 数组给我带来了问题。 具体来说,它似乎与类型转换有关。 1.6节的示例读取输入,然后计算将多少个字符归入某些类别。 当我通过可执行文件通过管道传输源代码时,除了无法正确捕获任何数字字符之外,这段代码似乎正在创建段错误。 如果我使用标准输入并将^ D转换为EOF,则它根本不会捕获数字,而是将其视为其他字符(尽管没有段错误)。

while ((c=getchar())!=EOF)
  if(c>='0'&&c>='9')
    ++ndigit[c-'0'];

我已经消除了它可能是程序的另一部分通过换出其他部分而导致故障的可能性,但是如果有帮助,我仍然可以发布其余部分。 据我了解,此循环应通过输入中的各个字符进行。 如果它们的值在0到9之间,则它将字符转换为数字(对应于n位数数组位置0-9),并将该数组位置增加1。

K&R 2e真的过时了吗? 将字符数转换为整数时,字符编码(ASCII与Uni​​code)是否存在问题? 任何意见,将不胜感激。

我不确定如何检查编码(即使很重要),但是我的编译器是gcc(Ubuntu / Linaro 4.7.3-1ubuntu1)4.7.3

if(c>='0'&&c>='9')

好吧,你的意思是:

if(c>='0'&&c<='9')

另外,请检查c是否正确声明为int类型而不是char类型。

由于数组循环中出现错字,因此我无法进行此练习。

for (i = 0; 1 < 10; ++i)
     ndigit[i] = 0;

应该是..

for (i = 0; i < 10; ++i)
      ndigit[i] = 0;

请注意, i1已转置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM