【发布时间】:2019-03-06 14:47:18
【问题描述】:
我正在尝试计算数组数组的元素以分配内存“res”,用于连接存储在“argv”中的每个字符串,包括 NULL 终止符。可能还有更多的错误要发现,但我不明白的第一个是/* length of arrays */ 中的argv[a][b] != NULL。为什么这是不可接受的,还有其他方法(无需硬编码或传递长度)来确定元素的数量?
使用:http://pythontutor.com/c.html#mode=edit
char *ft_concat_params (int argc, char **argv)
{
int len_argc = argc - 1,
len_argv = 0;
char *res = NULL;
/* length of argvs */
for (int a = 0; a < len_argc; a++) {
for (int b = 0;argv[a][b] != NULL; b++) {
len_argv++;
}
}
/* allocate memory res -- freed by calling function! */
res = malloc (len_argv * sizeof * res);
if (!res) {
ft_putstr ("not allocated res");
free(res);
return NULL;
}
/* concate strings */
for (int a = 0; a < len_argc; a++) {
int b = 0;
while (argv[a][b] != '\0') {
res = &argv[a][b];
b++;
}
res[b] = '\0';
}
return res;
}
int main(void)
{
int argc = 4;
char argv[3][6] = {
{'s','t','a','r','t','\0'},
{'s','t','a','r','t','\0'},
{'s','t','a','r','t','\0'}
};
char *arr;
arr = ft_concat_params (argc, argv);
if (!arr) /* validate return */
return 1;
free(arr);
}
【问题讨论】:
-
您似乎在尝试复制程序参数传递给
int main(int argc, char *argv[])的方式,但它们与您所做的不同。 -
'\0' 类似于 (char)0 = 一个值为 0 的字符。这用于终止 C 字符串,它与指向内存位置的指针 NULL 不同0
-
@MikNiller - 从技术上讲,
'\0'和NULL在许多系统上的数值为零,但我同意,不要混淆它们 -
@WeatherVane 我这样做是因为pythontutor.com/c.html#mode=edit 似乎没有办法将参数传递给 main。我应该如何声明数组?
-
正如我写的:
int main(int argc, char *argv[])请看What are the arguments to main() for? 编辑:哦,我明白了,网页不允许你。
标签: c for-loop multidimensional-array