指向char[]的双指针
好的,我有以下代码:指向char[]的双指针,c,pointers,casting,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, ";") } 我希望每个ar
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]
都需要在某个点上转换为变量字符串。我被指针弄糊涂了,但我正在慢慢地变得更好
编辑:
arg[0]
将是ls,arg[1]
将是日期,arg[2]
将是上述代码之后的ls
我想把每个参数放回char字符串[100],并通过算法处理它 如果希望将字符串的部分复制到固定长度的字符串[100],则需要为循环中的每个args[]malloc 100个字符,并将strtok的结果strncpy()复制到其中。strdup将只为所提供字符串的实际长度分配足够的内存(加上\0)此:
char** args = (char**)malloc(10*sizeof(char*));
memset(args, 0, sizeof(char*)*10);
是坏代码。首先,您不应该强制转换
malloc()
的返回值。其次,args
是指向char
的十个指针的指针。不能使用memset()
将它们设置为NULL
,不能保证“所有字节零”与NULL
相同。您需要使用循环。一个最简单的方法是在某个临时变量中保留原始字符串的备份
char string[100] = "ls ; date ; ls";
char temp_str[100] = {0};
strcpy (temp_str, string);
另一种方法是通过strcat
实现z
具有耕地数量
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, ";");
}
}
memset(字符串'\0',100);
对于(i=0;i
注意:注意边界条件检查(旁白)
memset
与指针不可靠;不能保证空指针都是零。(在普通硬件上是这样,但是通过args
将每个元素设置为NULL
的循环更方便、更明确。)如果超过10个
令牌怎么办args
仅适用于10
。不需要对malloc进行强制转换。另外,你的实际问题是什么?不确定问题是什么,代码看起来很好,除了没有索引控制<代码> ARGs<代码>。如果你想清除你的Malc内存,考虑CalLoCo()。另外,我也不太确定你在问什么……我想我知道你想做什么,但这会比你想要的更深入一些。如果我错了,请纠正我,但您正在尝试将存储在arg
中的所有字符串连接到一个字符串中。C本机不提供这样做的方法。强制转换指针将不会像您期望的那样,因为一旦所有的事情都说了和做了,它就包含指针而不是字符。你能用一个例子更新吗,包括一个输入字符串和你期望的输出?我不太确定你想要什么样的。
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, ";");
}
}