我正在尝试将字符串转换为字母数字值,每次尝试显示argv [1]时都会出现Segmentation fault(core dumped)错误...
#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语句错误?
答案 0 :(得分:1)
您的问题是printf
- 声明。
这样做:
#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的范围内。你想逐个输出它们作为整数。
如果输出字符串不再有有效结束,这也可能解释了输入相关的分段错误,但我无法再现它。