考虑以下代码:
char *strs[] = { "string1", "string2", NULL };
char *ptr1 = NULL, *ptr2 = NULL, *tmp;
short iter = 0;
tmp = ptr1;
while (iter < 2)
{
tmp = strdup(strs[iter]);
tmp = ptr2;
iter++;
}
printf("1: %s\n2: %s\n", ptr1, ptr2);
Run Code Online (Sandbox Code Playgroud)
我希望这输出"string1 \nstring2 \n",但str1和str2保持为null.我究竟做错了什么?
有没有所谓的变量str1和str2,所以我会假设你的意思ptr1和ptr2.
您永远不会为这些变量分配任何内容,因此没有理由让它们从原始值更改.我认为这就是你的意图:
char *strs[] = { "string1", "string2", NULL };
char *ptr1 = NULL, *ptr2 = NULL, **tmp;
short iter = 0;
tmp = &ptr1;
while (iter < 2)
{
*tmp = strdup(strs[iter]);
tmp = &ptr2;
iter++;
}
printf("1: %s\n2: %s\n", ptr1, ptr2);
Run Code Online (Sandbox Code Playgroud)
然而,这是一段相当奇怪的代码.你究竟想要实现什么目标?可能有更优雅的解决方案.