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()
。
我正在学习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()
。