修复分段错误:11
Fixing a Segmentation fault: 11
我目前正在尝试将整数字符串(如“509”作为 char 类型)转换为 C 中的 int。但是,一旦我添加了检查值是否应为负的代码部分,我就得到了分割错误。我尝试做一些研究,发现这是因为使用了错误的指针或访问了我无权访问的内存。但我似乎无法弄清楚我哪里出错了。这是我的第一个 C class,所以我是新手,任何帮助将不胜感激。
谢谢!
#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
Matt McNabb 已经暗示
if(strcmp(string[0], "-") == 0){
错了。 strcmp 想要两个字符串,你给了它一个字符和一个字符串。做
if(string[0] == '-')){
是的,永远不要忽略警告,编译器正在努力帮助您。虽然它没有帮助是有争议的,但如果它致命而不是你会尝试修复它
我目前正在尝试将整数字符串(如“509”作为 char 类型)转换为 C 中的 int。但是,一旦我添加了检查值是否应为负的代码部分,我就得到了分割错误。我尝试做一些研究,发现这是因为使用了错误的指针或访问了我无权访问的内存。但我似乎无法弄清楚我哪里出错了。这是我的第一个 C class,所以我是新手,任何帮助将不胜感激。 谢谢!
#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
Matt McNabb 已经暗示
if(strcmp(string[0], "-") == 0){
错了。 strcmp 想要两个字符串,你给了它一个字符和一个字符串。做
if(string[0] == '-')){
是的,永远不要忽略警告,编译器正在努力帮助您。虽然它没有帮助是有争议的,但如果它致命而不是你会尝试修复它