gpt4 book ai didi

c - 如何在 C 命令行中打印出主函数参数?

转载 作者:行者123 更新时间:2023-11-30 14:41:44 25 4
gpt4 key购买 nike

我正在尝试调试此代码,但我似乎找不到在命令行上出现此错误的错误:

./thisa
thisa
isa
a
test

相反,它需要给我这个:

./arguments
this
is
a
test

假设我输入“./arguments this is a test”作为我的输入。

关于错误可能出在哪里有什么建议吗?

谢谢!

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

void printArguments( int rows, int cols, char args[][ cols ] )
{
for (int i = 0; i < rows; i++) {
printf("%s\n", args[i]);
}
}

int main( int argc, char *argv[] )
{
// Figure out the length of the longest command-line argument.
int longest = 0;

for (int i = 0; i < argc; i++) {
int len = sizeof(argv[i])/sizeof(argv[0]);
if (len > longest) {
longest = len;
}
}

char (*words)[ longest + 1 ];
int n = argc;
words = (char (*)[longest + 1])malloc(n * (longest + 1) * sizeof(char));

// Copy each command-line argument to a row of this new array.
for (int i = 0; i < n; i++) {
strcpy(words[i], argv[i]);
}

// Call a function that's expecting the command-line arguments as a 2D array
printArguments( argc, longest + 1, words );

return 0;
}

最佳答案

这里发生了很多事情。如果您只是尝试打印命令行参数,那么您的辅助函数内部已经有了答案。只需直接在 argc/argv 上使用该代码即可:

for (int i = 0; i < argc; i++) {
printf("%s\n", argv[i]);
}

由于您费尽心思将所有内容复制到具有完全不同格式的数组中,所以我假设这个问题比您给我们的内容更多,所以我将把问题/代码解决为写的。

正如其他几个人提到的,由于 argv[x] ,行 len = sizeof(argv[i])/sizeof(argv[0]) 将始终返回 1 > 是一个指针。要测量参数号 x 的长度,您只需要 sizeof(argv[x])

char (*words)[最长+ 1] declares a pointer to an array (最长+1) 个字符。然后分配一个更大的缓冲区((longest+1) * argc 字节)并将其分配给指针。目前尚不清楚你想在这里做什么。一般来说,在分配字符缓冲区时,您会执行以下操作:

char* my_ptr;
my_ptr = malloc(num_bytes);

您不需要在指针中对一维缓冲区的大小进行任何编码,您只需要一个普通的字符指针即可。您也不需要对 malloc() 的返回值进行类型转换。它返回一个 void*,它将隐式转换为任何其他指针类型,无需强制转换。

下一段代码可能是您遇到很多问题的地方。

for (int i = 0; i < n; i++) {
strcpy(words[i], argv[i]);
}

这里,words是一个指向一维数组的指针。此代码首先将参数 #0 复制到目标的字节 0 (OK)。下一次循环时,它将参数 #1 复制到目标的字节 1。这将覆盖你第一个参数的一部分。该缓冲区中有足够的空间来写入所有参数而不会重叠,但您的指针只是一个一维指针(您将其视为一个二维指针)。要将目标视为二维矩阵,您需要自己执行一些指针算术:

strcpy(words[i * (longest + 1)], argv[i]);

这会将第一个参数写入字节 0,第二个参数写入字节 (longest+1),第三个参数写入字节 2*(longest+1),依此类推.,确保它们不会重叠。您还需要对辅助函数进行类似的更改。

关于c - 如何在 C 命令行中打印出主函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54816847/

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