gpt4 book ai didi

c - 段错误(核心转储)- 简单

转载 作者:行者123 更新时间:2023-11-30 20:38:35 26 4
gpt4 key购买 nike

我是 C 初学者。我有一个简单的程序,我想将每个关键字更改为相应的数字。例如 A = 0、B = 1 和 F = 5 等。在这种情况下,关键字“hello”将是“7 4 11 11 14”。我可以编译此代码,但每当我运行此代码时,我都会收到错误“段错误(核心转储)”。我尝试了多种方法来改变它,但没有效果。有人可以检查我的代码并给我反馈吗?也欢迎对我的风格、逻辑和其他代码相关内容提出任何建设性的反馈!

#include <cs50.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main(int argc, string argv[])
{

int keylength = strlen(argv[1]);
char *key = argv[1];

// insert keyword
if (argc != 2)
{
printf("Less commands please.");
return 1;
}
else
{
if (!isalpha(argv[1]))
{
printf("Please no numbers or weird symbols");
}
else
{
for (int i = 0; i < keylength; i++)
{
if(isupper(key[i]))
{
key[i] = key[i] - 65;
}

else if(islower(key[i]))
{
key[i] = key[i] - 97;
}
}
}
}

}

最佳答案

你可以这样做

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

int main(int argc, char* argv[])
{
if (argc != 2)
{
printf("Must provide one argument\n");
return 1;
}

int keylength = strlen(argv[1]);
int i = 0;

for( ; i <keylength; i++)
{
if (!isalpha(argv[1][i]))
{
printf("not alpha\n");
return 1;
}
}

char *key = argv[1];
printf("b4 %s\n", argv[1]);

for (int i = 0; i < keylength; i++)
{
if(isupper(key[i]))
key[i] = key[i] - 65;
else if(islower(key[i]))
key[i] = key[i] - 97;
}

printf("after %s\n", argv[1]);
}

注意事项。

  1. 在知道 argc 至少为 2 之前,请勿尝试访问 argv[1]
  2. 您需要在循环中根据 isalpha 检查 argv[1] 中的每个字符。不仅仅是将字符串指针直接传递给 isalpha
  3. 另请注意,您正在直接更改命令行参数内存。虽然这是可能做到的,但这是一种可疑的做法。最好复制 argv[1] 并对其进行更改。我没有在我的示例中实现这一点。

关于c - 段错误(核心转储)- 简单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28553292/

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