我可以使用指针作为C语言中gets的参数吗?

问题描述 投票:1回答:3

我正在学习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]);

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

c pointers gets
3个回答
1
投票

您将指针传递到函数(例如gets()),该函数将数据写入指针所指向的存储位置。在您的情况下,您具有uninitialized指针,这意味着它指向随机内存位置(应用程序或操作系统所在的位置)。这会导致随机效应-从“工作”到异常终止或挂起。您需要保留内存并分配指向该内存的指针,例如创建人:

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

gets(ptr);
puts(ptr);

free(ptr);

考虑使用更安全的gets_s()


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

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


1
投票

指针必须先指向某处。

#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]);
}
© www.soinside.com 2019 - 2024. All rights reserved.