指向char []的双指针

时间:2012-06-19 15:14:26

标签: c pointers casting

好的,我有以下代码:

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]都被转换为一个字符数组 - 字符串[100] - 然后在我所遵循的算法中进行处理。每个arg[z]都需要在某个时刻转换为变量字符串。我对指针很困惑,但我对它们的态度越来越好了。

编辑:

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

arg[0]将为ls,arg[1]将为日期,arg[2]将为上述代码后的ls。

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

3 个答案:

答案 0 :(得分:1)

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

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

另一种方法是strcatz有一定数量的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, ";");
    }
}

注意:注意边界条件检查

答案 1 :(得分:0)

如果你想将字符串的部分复制到一个固定长度的字符串[100]中,那么你需要为循环内的每个args [] malloc 100个字符,并将strrtcpy()的结果输入到它中。 strdup只会为提供的字符串的实际长度(加上\ 0)

分配足够的内存

答案 2 :(得分:0)

此:

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

是破码。首先,您不应该转换malloc()的返回值。其次,args是指向char的十个指针的指针。您无法使用NULL将其设置为memset(),并不能保证“所有字节为零”与NULL相同。你需要使用循环。