В настоящее время я пытаюсь преобразовать целую строку (например, «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
Убедитесь, что вы включили предупреждения компилятора и обратите внимание на них. Первая ошибка находится в строке 'if (strcmp (string [0]," - ") == 0) {', и компилятор * должен * дать вам диагностическое сообщение здесь. –
также: вместо копирования вставки всего блока кода и изменения 1 цифры в нем; вместо этого установите «i = 0» или «i = 1» в зависимости от отрицательного знака, а затем только один блок кода один раз. –
Это будет иметь больший смысл и поможет читабельности! Спасибо – user3457171