C中gets的参数可以用指针吗?

Can I use a pointer as the parameter of gets in C?

我正在学习C语言

当我将指针传递给 gets() 时,我发现它可以正常工作。

char *ptr;
gets(ptr);
puts(ptr);

但是如果我定义一个指针数组,它就不起作用了。

char *ptr[4];
int i=0;
for(i=0;i<4;++i)
    gets(ptr[i]);
for(i=0;i<4;++i)
    puts(ptr[i]);

它们是不同的,还是第一部分实际上是错误的?我想知道原因。

char *ptr[4];
int i=0;
for(i=0;i<4;++i)
    gets(ptr[i]);

这不是有效的 C 代码,因为您没有为 ptr[i] 分配 space。另一方面,永远不要使用 gets 因为它是一个不检查缓冲区限制的函数。

指针必须先指向某处。

#define BUFSIZE 100

char *ptr = malloc(BUFSIZE);
fgets(stdin, ptr, BUFSIZE);
puts(ptr);

char *ptr[4];
int i=0;
for(i=0;i<4;++i) {
    ptr[i] = malloc(BUFSIZE);
    fgets(ptr[i], BUFSIZE, stdin);
}
for(i=0;i<4;++i) {
    puts(ptr[i]);
}

您将指针传递给一个函数(例如 gets()),该函数将数据写入您的指针指向的内存位置。在您的情况下,您有 uninitialized 指针,这意味着它指向一个随机内存位置(应用程序或操作系统所在的位置)。这会导致随机效应——从 "working" 到异常终止或挂起。您需要保留内存并分配指向那里的指针,例如通过:

char *ptr = (char*)malloc(256);

gets(ptr);
puts(ptr);

free(ptr);

考虑使用更安全的gets_s()