好的,我有以下代码:
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]并通过算法处理它。
答案 0 :(得分: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, ";");
}
}
注意:注意边界条件检查
答案 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
相同。你需要使用循环。