scanf(「%s」,str)不會這樣做。它會停止在第一個空間閱讀。 當字符串很大時,gets(str)不起作用。有任何想法嗎?如何在C中讀取帶空格的字符串?
回答
你想什麼時候停止閱讀?在EOF,在一個特定的角色,或什麼?
可以讀取與%C的字符的特定數目
c匹配的寬度 計數字符(默認值1)的序列;下一個 指針必須是指向char的指針,並且對於所有字符必須有足夠的空間 (不添加終止NUL)。領先的白色空間的通常的 跳過被抑制。首先,跳過空白 ,在格式中使用顯式空格。
可以讀取特定的字符(或至多排除那些)與%[
[匹配的從指定的組的 接受字符 字符的非空序列;下一個指針必須是指向 char, 的指針,並且 字符串中的所有字符必須有足夠的空間, 加上終止的NUL字符。領先的空白的通常跳過被抑制。該字符串將由 中的 (或不在)特定集合中的字符組成;該集合由開放括號[字符和右括號]之間的 字符 定義。如果第一個 字符 在開放括號之後是一個旋轉曲線^,則該集合將排除這些字符。若要在該組中包含一個接近的 支架,使其成爲支架或旋轉支架打開後的第一個字符;任何其他職位都將結束。 連字符 - 也是特殊的;當放置在兩個 其他字符之間時,它會將所有干預字符添加到該集合中。 要包含連字符,請將其作爲最後一個字符,然後放在最後一個關閉括號內。例如,`[^] 0-9-]'表示除了括號,0到9和連字符''外的所有設置 ``全部 。該 串 與性格沒有在外觀結束(或者,用 西爾 cumflex中)設置或當字段寬度耗盡
創建自己的函數讀取一行。這裏就是你基本上要做到:
1. fgets into allocated (growable) memory 2. if it was a full line you're done 3. grow the array 4. fgets more characters into the newly allocated memory 5. goto 2.
的實現可以是有點棘手:-)
你需要考慮你需要什麼傳遞給你的函數(至少是地址數組及其大小);以及當一切「有效」或出現錯誤時函數返回的內容。你需要決定什麼是錯誤(是一個10G字節的字符串,沒有'\ n'錯誤?)。您需要決定如何增長陣列。
編輯
實際上,它可能是更好的fgetc
而非fgets
get a character it it EOF? DONE add to array (update length), possible growing it (update size) is it '\n'? DONE repeat
要與空間讀取字符串,你可以做如下:
char name[30],ch;
i=1;
while((ch=getchar())!='\n')
{
name[i]=ch;
i++;
}
i++;
name[i]='\n';
printf("String is %s",name);
'ch'應該是'int'來區分'EOF'和其他'char'。現在,'while((ch = getchar())!='\ n')'是一個無限循環,如果EOF從getchar()返回。 – chux 2015-01-10 18:58:01
char str[100];
試試這個
scanf("%[^\n]s",str);
或本
fgets(str, sizeof str, stdin))
1)在''%[^ \ n] s「'中沒有's'的理由。 2)'scanf(「%[^ \ n] ...'不會掃描任何東西,如果輸入是'」\ n「',則不會在'str'中保存任何內容3)'scanf(」%[^ \ n] .. .'不能防止大的輸入。4)'scanf(「%[^ \ n] ...'在'stdin'中留下'\ n''。 – chux 2015-01-10 18:53:40
- 1. 如何讀取C語言中包含空格的字符串
- 2. 在Fortran中讀取帶空格的字符串
- 3. 閱讀C中的空格字符串
- 4. 帶空格的C++輸入字符串
- 5. 如何讀取由空格分隔的無符號字符c
- 6. 基於空格的拆分字符串並在angular2中讀取該字符串
- 7. 如何讀取字符串,直到兩個連續的空格?
- 8. 如何從C中的字符串中讀取字符#
- 9. 如何從字符串流中提取空格C++
- 10. 在C中讀取字符串
- 11. 如何在C#中的字符串中讀取超出0x20?
- 12. 使用C中的sscanf讀取帶空格的字符串時出現的標點符號錯誤
- 13. Mysql - 插入帶空格的字符串
- 14. 帶空格的字符串輸入
- 15. 如何在J2ME中讀取字符串?
- 16. 在C中讀取一個像XML格式的字符串#
- 17. 在C#中空格後丟棄字符串字符串
- 18. 如何讀取類型「IBuffer」的值在c#中的字符串?
- 19. 如何在Objective C中搜索包含空格的字符串?
- 20. 如何在字符串中的空格之間獲取文本?
- 21. 如何讀取C++中的一串字符串?
- 22. 如何在C++中讀取未知大小的字符串
- 23. 如何在C#中讀取utf-8編碼的字符串?
- 24. 無法讀取字符串中的空格
- 25. 如何在C#中提取字符串一個字符串的
- 26. C++:從空字符文件中讀取
- 27. 如何在C++中用空格輸入長字符串?
- 28. 如何在字符串中添加多個空格(空格?)?
- 29. 如何從C++中的字符串中刪除空格
- 30. 立即讀取輸入字符串和整數用C++中的空格分隔
'gets'永遠不會奏效。這是使用'gets'的固有缺陷。使用'fgets'。 – 2010-10-26 16:26:08
也許這是我的c版本,不會接受獲取...謝謝! – Johny 2010-10-26 16:28:47
@Johnny:R對使用'gets()'的警告是由於使用它會在你的代碼中引入一個*巨大的安全漏洞,而不是你的特定編譯器有問題(它不應該;'get ()'從一開始就是C的一部分)。 C99已棄用,不應再使用。 – 2010-10-26 19:47:13