[英]Why does the following c code work in turbo c and not in devc++?
我有以下一段代碼:
char *str;
gets(str);
現在它在 turbo c 中工作,但在 devc 中失敗。
我必須添加以下內容才能使其在 devC++ 中工作。
char *str = malloc(5);
誰能解釋一下,為什么會這樣?
此外,哪個是真實的和更正確的編碼形式。
那
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);
gets(str);
即使在 turbo c++ 中它也不應該工作,因為您沒有為 str 分配空間。 正確的方法
str = (char *)malloc(sizeof(char) * (length+1));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.