![](/img/trans.png)
[英]chdir not working in unix under c code always failing to change directory
[英]gets not working in C under Unix
我正在嘗試使用gets
函數在Unix下以C語言輸入字符串,但是它不起作用!
它顯示以下警告:
warning: the `gets' function is dangerous and should not be used.
如果我運行該程序,則不會得到輸入字段。 該代碼是
#include<stdio.h>
int main()
{
int i;
char ch,newfile[10],content[100];
FILE *create;
printf("Enter New File Name to Create : ");
scanf("%s",newfile);
create=fopen(newfile,"w+");
printf("\nEnter Contents for %s : ",newfile);
//fgets(content,sizeof content,stdin);
//scanf("%s",&content);
//gets(content);
for(i=0;i<100;i++)
{
if(content[i]!='\0')
{
ch=content[i];
putc(ch,create);
}
else
break;
}
printf("\nYour File Is Created\n");
return 0;
}
有人請幫助我。 我已經評論了我嘗試過的所有可能性。 謝謝!
raw scanf("%s")
和gets()一樣危險(兩者都暴露於緩沖區溢出中)。 您應該改用fgets()
來限制字符串的長度。
gets()和fgets()之間的另一個區別是后者將'\\n'
放入字符串中,乍一看雖然令人討厭,但您可以查看該行是否被截斷。 您應該做的是:
'\\n'
'\\n'
替換為'\\0'
就可以了。 getchar()
直到獲得'\\n'
或EOF
)。 第一個scanf不會占用行尾字符-您可以通過輸入“ foo bar”作為文件名來進行研究。
下一行的格式應為scanf("\\n%99s", content);
-注意前面的'\\ n'以讀取換行符,並注意保護99,以防止緩沖區溢出。 仍然不幸的是,如果一個方法鍵入“ foo bar”作為文件名,這種方法不足以產生預期的結果。 違反直覺的“條”被視為內容。
最后, gets
與先前的遭受相同的問題。 (主要問題是,它沒有防止緩沖區溢出的措施。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.