-1

I have the following piece of code:

char *str;
gets(str);

Now it works in turbo c but fails to in devc.

I have to add the following in order to make it work in devC++.

char *str = malloc(5);

Can anyone explain, why is it so?

Also, which one is authentic and a more correct form of coding.

4

2 回答 2

0
gets(str);

它甚至在 turbo c++ 中也不应该工作,因为你没有为 str 分配空间。正确的方法

 str = (char *)malloc(sizeof(char) * (length+1));
于 2020-07-01T11:33:06.680 回答
0

char *str;
gets(str);

只是不可能是正确的。str未初始化,并按gets值接收指针,因此无法在内部分配它。对于未定义的行为,您只是幸运/不幸。

哪一个是真实的和更正确的编码形式?

以上都不是。不要使用gets. 这是不安全的,因为您无法限制输入大小。使用fgets指定的大小(当然还有分配的缓冲区!)

#include <stdio.h>
char buffer[20];
fgets(buffer, sizeof(buffer), stdin); // reads at most 19 chars + null-termination

scanf有大小限制(注意 -1):scanf("%19s",buffer);

于 2017-02-08T14:41:20.173 回答