这个c strdup代码有什么问题?

use*_*747 1 c strdup

考虑以下代码:

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.我究竟做错了什么?

Mar*_*tos 6

有没有所谓的变量str1str2,所以我会假设你的意思ptr1ptr2.

您永远不会为这些变量分配任何内容,因此没有理由让它们从原始值更改.我认为这就是你的意图:

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)

然而,这是一段相当奇怪的代码.你究竟想要实现什么目标?可能有更优雅的解决方案.