当我们使用二维数组字符时,我们可以自由地初始化我们声明数组的字符串,或者使用scanf()函数接收字符串。但是当我们使用指针数组时无法使用scanf()从键盘接收字符串。为什么呢?
#include<stdio.h>
int main()
{
char *names[6];
int i;
for(i=0;i<=5;i++)
{
printf("Enter name:");
scanf("%s",names[i]);
}
return 0;
答案 0 :(得分:4)
您的代码不起作用,因为它通过将字符串存储到未初始化为指向任何内容的指针来调用未定义的行为。您需要使用malloc()
。
valgrind
是一个可以自动为您捕捉此类程序的工具。
答案 1 :(得分:3)
char *names[6];
将names
声明为指向char
的指针数组,但不为names
的元素分配内存。在写入之前,您需要为每个元素分配内存,否则它将调用未定义的行为。
试试这个:
for(i = 0; i <= 5; i++)
{
printf("Enter name:");
names[i] = malloc(SIZE); // SIZE is for length of string
if( names[i] != NULL)
scanf("%s", names[i]);
}
答案 2 :(得分:2)
scanf不会自动分配内存,因此在调用scanf之前必须分配一个缓冲区来存储输入。
#include<stdio.h>
int main()
{
char *names[6];
int i;
for(i=0;i<=5;i++)
{
printf("Enter name:");
names[i]=(char *)malloc(256); // 256 is size of buffer
scanf("%s",names[i]);
}
return 0;