2017-08-24 77 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);