gpt4 book ai didi

c - 更改 argv 中的 char 值导致段错误

转载 作者:行者123 更新时间:2023-11-30 15:40:50 24 4
gpt4 key购买 nike

我正在尝试将字符串转换为其字母数字值,每次尝试显示 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 语句。

这样做:

#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。您希望将它们作为整数一一输出。

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

关于c - 更改 argv 中的 char 值导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20820699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com