2015-02-10 114 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] == '-')){ 

是的,不要忽略警告,编译器试图帮助你。虽然它是没有帮助的,但如果它已经发生了致命错误,你可能会试图修复它。