C代码的分段错误

时间:2017-08-24 19:23:17

标签: c unix

我是C新手并试图编写一个简单的Ceaser密码程序a-> b-> c等等。到目前为止,代码编译,但我得到一个错误139,当我查看它时,它出现了一个分段错误。我以前从来没有遇到这种情况,并想知道是否有人可以看看我做错了什么?

您好,感谢大家的帮助,139错误不再存在我的更新代码在下面工作:D。

    #include <stdio.h>
int main()
{
   char strg [100], ch;
   int i;

   printf ("Enter a string\n");
   scanf ("%s" , strg);
   for (i = 0; strg [i] != '\0';  ++i)
   {
      ch = strg[i];
      if (ch >= 'a' && ch <= 'z')
      {
        ch = ch + 1;

        if(ch > 'z')
        {
          ch = ch - 'z' + 'a' -1;
        }
        strg[i] = ch;
      }

   }
   printf ("The string is %s", strg);
   return 0;
}

2 个答案:

答案 0 :(得分:4)

printf (“The string is %s, strg”);中的拼写错误,实际上您没有为%s提供参数。

printf ("The string is %s", strg);

代替。

答案 1 :(得分:2)

如果您使用函数scanf来扫描字符串,则告知扫描字符的限制,因此如果您的数组有100个边界,请执行以下操作

scanf ("%99s" , strg);  // Leave one byte for null terminating character

也在这里

ch = &strg[i];

您要将char*分配给char,删除&引用运算符(此处用于获取变量地址)

ch = strg[i];

最后这个

printf ("The string is %s, strg");

会导致未定义的行为(从堆栈中挑选一些未定义的数据),我想你想做以下

printf ("The string is %s", strg);