繁体   English   中英

argv中更改char值导致分割错误

[英]segmentation fault from changing char value in argv

我正在尝试将字符串转换为其字母数字值,并且每次尝试显示argv [1]时都会遇到分段错误(核心转储)错误。

#include <stdio.h>
#include <string.h>


int main(int argc, char* argv[])
{        
    int key[strlen(argv[1])];
    for (int i=0,n=strlen(argv[1]);i<n;i++)
    {
        // i'm going to assume all command line arguments are alphabetic
        if(argv[1][i]<='Z')
            {argv[1][i]-='A';}
        else
            {argv[1][i]-='a';}

        key[i]=argv[1][i];
    }
    printf("%s",argv[1]);
}

我环顾四周,很多答案都说它是由0除/取模而来的,但我根本不这样做。 我已经评论和未评论的东西,我看到没有else语句,它就可以正常工作。 如果程序适用于if语句,为什么应该为else语句给出错误?

您的问题是printf -statement。

像这样做:

#include <stdio.h>
#include <string.h>


int main(int argc, char* argv[])
{        
    int key[strlen(argv[1])];
    for (int i=0,n=strlen(argv[1]);i<n;i++)
    {
        // i'm going to assume all command line arguments are alphabetic
        if(argv[1][i]<='Z')
            {argv[1][i]-='A';}
        else
            {argv[1][i]-='a';}

        key[i]=argv[1][i];

        printf("%d ",argv[1][i]);
    }
}

问题在于, argv[1]仍然是char* ,因此所有值都被解释为字符,而不是整数。 它们在0-26范围内,因此无法打印。您希望将它们一一输出为整数。

如果输出字符串不再具有有效的结尾,这也可能解释了与输入有关的分段错误,但是我无法重现该错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM