【发布时间】:2022-01-27 10:44:18
【问题描述】:
我对编码比较陌生,尤其是在 C 语言中。我正在尝试创建一个简单的程序,旨在将短语或字符串列表作为填充 char* argv[] 的命令行参数。然后,我想对每个字符执行基于 ASCII 的简单更改(例如使 a => b、b => c、... z => a 等),然后用更改后的字符串填充一个新数组。本质上,新对象将是一个字符数组,就像我相信 argv[] 一样。
这是我的代码,虽然我被各种“指针不兼容的转换赋值**char to string int char variable.....Segmentation fault”样式错误轰炸。
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char* cipher[argc];
for (int i = 1; i < argc; i++)
{
int n = strlen(argv[i]);
for (int j = 0; j < n-1; j++)
{
cipher[i][j] = argv[i][j];
}
}
for (int i = 0; i<argc-1; i++)
{
printf("%s\n", cipher[i]);
}
}
代码将通过命令行运行如下:
./secret the man in the middle is guilty
然后返回一个加扰的形式。我省略了加扰算法,因为这不是我遇到的问题。
我知道我可以更轻松地创建打印更改消息的代码,但我希望能够将新消息存储在数组中以防进一步更改。我不明白为什么我不能只访问特定二维索引的字符值并用它们填充新的“密码”数组。
我不明白什么?
【问题讨论】:
-
每个字符串都是一个由
chars 组成的数组。请注意,您有两个嵌套循环,但您只为cipher分配一个维度。 -
使用
cipher[i] = malloc(n+1)为cipher中的字符串分配内存。并且不要忘记添加空终止符。 -
@littleadv 如何定义二维数组?是否有类似 a[][] 之类的语法?
-
查看 Barmar 的评论。您定义了一个指针数组,这是正确的。现在他们每个人都需要指向某个地方。
标签: arrays c multidimensional-array command-line-arguments argv