[英]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.