【发布时间】:2022-01-16 15:49:23
【问题描述】:
当我试图在 c 中的字符串数组(char 数组)的末尾设置一个 NULL 值时,我有一个奇怪的行为。我需要使用 execv 将参数传递给进程,并且我的所有参数都是 int 类型的,所以我试图获取一个字符串数组,其中所有参数都转换为 char 数组。我创建了一个返回这个字符串数组的函数,但是当我将数组的最后一个值设置为 NULL(在参数中有一个终止值)时,我丢失了存储在第二个位置的值。如果我删除 NULL 值,则不会发生任何问题。这是代码,希望有人能帮助我
char **getParams(int offset, short isNode, int first) {
printf("Get params\n");
int args = 8;
int totalSize = 0;
int tmp[args];
tmp[0] = sizeof(char) * 5; // user / node
tmp[1] = snprintf(NULL, 0, "%d", x);
tmp[2] = snprintf(NULL, 0, "%d", x2);
tmp[3] = snprintf(NULL, 0, "%d", x3);
tmp[4] = snprintf(NULL, 0, "%d", x4);
tmp[5] = snprintf(NULL, 0, "%d", x5);
tmp[6] = snprintf(NULL, 0, "%d", x6);
tmp[7] = snprintf(NULL, 0, "%d", x7);
int i = 0;
for (i = 0; i < args; i++) totalSize += tmp[i];
char **_pars = malloc(totalSize + sizeof(NULL));
i = 0;
for (i = 0; i < args; i++) _pars[i] = malloc(tmp[i]);
_pars[0] = isNode == 1 ? "aaaa" : "bbbb" ;
sprintf(_pars[1], "%d", x);
sprintf(_pars[2], "%d", x2);
sprintf(_pars[3], "%d", x3);
sprintf(_pars[4], "%d", x4);
sprintf(_pars[5], "%d", x5);
sprintf(_pars[6], "%d", x6);
sprintf(_pars[7], "%d", x7);
printf("Value: %s", _pars[1]); /// Print without problem value
_pars[8] = NULL; //// ,--- Here happens the issue
printf("Value: %s", _pars[1]); /// Doesnt print any value
return _pars;
}
我也尝试将它放在 for 其中我 malloc 数组位置之后,但没有结果
_pars[8] = malloc(sizeof(NULL));
【问题讨论】: