2017-08-24 60 views
-3

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

你好,感谢大家的帮助,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; 
} 
+0

'ch =&strg [i]';' - 你的编译器没有在这里警告你? (这实际上是你编译的代码吗?大写R的'Return'是可疑的 –

+0

没有这是我编译时得到的图片https://gyazo.com/e811e8672213f4ebef1e9e4b4acdf239 – TylerB56

+4

正如我怀疑:这个问题中的代码与你编译的代码不一样,你为什么要这样做?请复制并粘贴实际的代码。 –

回答

4

它在printf (“The string is %s, strg”);,你居然不为%s提供一个参数,一个错字。

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

代替。

2

如果您正在使用的功能scanf扫描字符串,它是FINT告诉扫描的字符的限制,所以如果你的阵列有100个界限,做到以下

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

而且,这里

ch = &strg[i]; 

您正在分配char*char,删除&参考运算符(用于获取变量ad打扮这里)

ch = strg[i]; 

最后这个

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

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

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