2

好的,所以我有以下代码:

char** args = (char**)malloc(10*sizeof(char*));
memset(args, 0, sizeof(char*)*10);

char* curToken = strtok(string, ";");

for (int z = 0; curToken != NULL; z++) {
    args[z] = strdup(curToken);
    curToken = strtok(NULL, ";")
}

我希望每个都arg[z]转​​换成一个字符数组——char string[100]——然后在我遵循的算法中进行处理。每个都arg[z]需要在某个时候强制转换为变量字符串。我对指针感到困惑,但我正在慢慢变得更好。

编辑:

char string[100] = "ls ; date ; ls";

arg[0]将是 ls,arg[1]将是日期,并且arg[2]将是上述代码之后的 ls。

我想将每个参数放回 char string[100] 并通过算法处理它。

4

3 回答 3

1

一种最简单的方法是将原始字符串的备份保留在某个临时变量中。

char string[100] = "ls ; date ; ls"; 
char temp_str[100] = {0};
strcpy (temp_str, string);

另一种方法是通过strcat. z有agruments的数量。

memset(string, '\0', 100);
for (i = 0; i < z; i++)
{
    strcat(string, args[i]);
    if (i != (z - 1))
    {
        //if it is last string dont append semicolon
        strcat(string, ";");
    }
}

注意:注意边界条件检查

于 2012-06-22T06:45:33.190 回答
0

如果要将字符串的部分复制到固定长度的 string[100] 中,则需要为循环内的每个 args[] 分配 100 个字符,并将 strncpy() 的结果 strtok 放入其中。strdup 只会为提供的字符串的实际长度分配足够的内存(加上 \0)

于 2012-06-19T15:19:36.950 回答
0

这个:

char** args = (char**)malloc(10*sizeof(char*));
memset(args, 0, sizeof(char*)*10);

是损坏的代码。首先,您不应该强制转换malloc()的返回值。其次,args是一个指向十个指针的指针char。您不能将它们设置为NULLusing memset(),不能保证“所有字节为零”与NULL. 您需要使用循环。

于 2012-06-19T15:25:02.463 回答