2015-02-10 3 views
-1

В настоящее время я пытаюсь преобразовать целую строку (например, «509» как тип char) в int в C. Однако, как только я добавил часть кода, который был проверен, чтобы увидеть, должно ли значение быть отрицательным. Я получаю ошибку сегментации. Я попытался сделать некоторые исследования и обнаружил, что из-за неправильного использования указателей или доступа к памяти у меня нет разрешения. Но я не могу понять, где я ошибаюсь. Это мой первый класс 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) {', и компилятор * должен * дать вам диагностическое сообщение здесь. –

+1

также: вместо копирования вставки всего блока кода и изменения 1 цифры в нем; вместо этого установите «i = 0» или «i = 1» в зависимости от отрицательного знака, а затем только один блок кода один раз. –

+0

Это будет иметь больший смысл и поможет читабельности! Спасибо – user3457171

ответ

2

Matt МакНабб уже намекнул

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

неправ. strcmp хочет две строки, вы дали ей символ и строку. Do

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

И да, никогда не игнорируйте предупреждения, компилятор пытается вам помочь. Хотя можно утверждать, что его не помогло, если бы оно испугалось, вместо этого вы бы попытались его исправить.

Смежные вопросы