我试图用C写一个程序,允许用户输入名字,直到他们输入“完成”这个词。然后它会列出他们输入的所有名称。我知道我应该使用一个指针数组来完成这一点,然后使用一个while循环来继续输入名称,然后在输入名称后将指针放入数组中。问题是,一旦我打印出名字,所有的名字都等于我最后输入的名字。
我写了一个更简单的程序,它做的事情与我正在做的事情类似,也遇到了同样的问题。下面是代码。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char* first;
char* second;
for (int i = 0; i < 2; i++)
{
char enteredName[20];
printf("%s", "Please enter a name: ");
scanf("%s", enteredName);
if (i == 0)
{
first = enteredName;
}
else
{
second = enteredName;
}
}
printf("First: %s\n", first);
printf("Second: %s\n", second);
}
这个程序的输出是:
Please enter a name: john
Please enter a name: carl
First: carl
Second: carl
我认为第一个和第二个变量都指向内存中的同一个点,所以它们说的是同一件事。我如何解决这个问题,同时仍然使用循环来输入任意数量的名称?
1条答案
按热度按时间w3nuxt5m1#
我认为第一个和第二个变量都指向内存中的同一个点,所以它们说的是同一件事。
是的,没错。指针只保存对象的引用(地址)。你的指针指向(引用)同一个数组。
我如何解决这个问题,同时仍然使用循环来输入任意数量的名称?
您需要将字符串复制到分配给指针的内存中