解决分段错误:11

用户名

我目前正在尝试将整数字符串(如char类型的“ 509”转换为C中的int值)。但是,一旦我添加了检查该值是否为负的代码部分,就会出现分段错误。我尝试进行一些研究,发现其原因是使用了错误的指针或访问了我没有权限的内存。但是我似乎无法弄清楚我要去哪里。这是我的第一门C课,所以我是新手,我们将不胜感激。谢谢!

#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

pm100

马特·麦克纳伯(Matt McNabb)已经暗示

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

是错的。strcmp需要两个字符串,您给了它一个字符和一个字符串。

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

是的,永远不要忽略警告,编译器正在尝试为您提供帮助。尽管有争议的是它无济于事,但如果它失败了,您可能会尝试修复它

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章