2015-02-10 99 views
-1

我目前正在嘗試將一個整數字符串(如「char」類型爲「509」)轉換爲C中的一個int。但是,一旦我添加了檢查該值的部分代碼是負面的我得到了一個分割錯誤。我試圖做一些研究,發現它是因爲使用指針錯誤或訪問內存我沒有權限。但我似乎無法弄清楚我要出錯的地方。這是我的第一個C班,所以我對它很陌生,任何幫助都會非常感激。 謝謝!修復分段錯誤:11

#include <stdio.h> 
#include <string.h> 

int toInteger(char *string){ 
    int length = strlen(string); 
    int value = 0; 
    if(strcmp(string[0], "-") == 0){ 
     for(int i = 1; i < length; i ++){ 
      if((string[i] - '0') < 0 || (string[i] - '0') > 9){ 
       printf("string must be entirely numeric values.\n"); 
      } 
      else{ 
       value = value * 10 + (string[i] - '0'); 
      } 
     } 
     value = value * -1; 
    } 
    else{ 

     for(int i = 0; i < length; i ++){ 
      if((string[i] - '0') < 0 || (string[i] - '0') > 9){ 
       printf("string must be entirely numeric values.!\n"); 
      }else{ 
      value = value * 10 + (string[i] - '0'); 
      } 
     } 
    } 
    return value; 
} 

int main(int argc, char *argv[]){ 

int x = argc; 
char *variable = argv[1]; 
char *function = argv[2]; 

if(strcmp(function,"1") == 0){ 
     int asInteger = toInteger(variable); 
     printf("%d\n",asInteger); 
    } 
else { 
    printf("incorrect function number"); 
} 
return 0; 
} 

的代碼工作時,該函數只有這個

int toInteger(char *string){ 
int length = strlen(string); 
int value = 0; 

    for(int i = 0; i < length; i ++){ 
     if((string[i] - '0') < 0 || (string[i] - '0') > 9){ 
      printf("string must be entirely numeric values.!\n"); 
     }else{ 
     value = value * 10 + (string[i] - '0'); 
     } 
    } 
    return value; 
} 

但一旦我添加了其他循環來檢查它開始給我的分段錯誤負號:11

+2

確保你已經啓用了編譯器警告,並且注意它們。第一個錯誤是在行if(strcmp(string [0],「 - 」)== 0){',並且編譯器*必須*在這裏給你一條診斷消息。 – 2015-02-10 00:34:53

+1

另外:而不是複製粘貼一整塊代碼並更改其中的一個數字;而是根據負號設置「i = 0」或「i = 1」,然後只有代碼塊一次。 – 2015-02-10 00:36:44

+0

這將使更多的意義,並幫助可讀性!謝謝 – user3457171 2015-02-10 00:37:58

回答

2

馬特McNabb已經暗示

if(strcmp(string[0], "-") == 0){ 

是錯誤的。 strcmp需要兩個字符串,你給它一個字符和一個字符串。做

if(string[0] == '-')){ 

是的,不要忽略警告,編譯器試圖幫助你。雖然它是沒有幫助的,但如果它已經發生了致命錯誤,你可能會試圖修復它。