![](/img/trans.png)
[英]what's the difference between char *s[] and char s[][20] in C?
[英]In a C function what's the difference between char and string?
我正在使用老師的模板,代碼開頭說:
#include "lab8.h"
void main(void)
{
int response;
int count;
string words[MAX_COUNT];
稍后在函數中,很多單詞被放入單詞字符串中。 所以我就像看着最后一行,感到困惑。 我以為char聲明了字符串? 最后那行甚至做什么? 稍后,我還在幾個函數參數列表中注意到,輸入的是“字符串單詞”,而不是我期望的提及char或其他內容。
編輯:
typedef char string[MAX_LENGTH];
在.h文件中編寫的文件沒有看到。
C沒有稱為string
的基本數據類型 。
仔細檢查lab8.h
文件。 通常, string
應為unsigned char
的typedef。
本質上是string words[MAX_COUNT];
定義一個變量類型string
數組,其中包含MAX_COUNT
個變量。
C沒有專用的字符串數據類型。 在C語言中, 字符串是一個字符值序列,后跟一個零值字節。 字符串存儲為char
數組,但並非所有char
數組都包含字符串。
例如,
char word[] = { 'h', 'e', 'l', 'l', 'o', 0 };
將字符串"hello"
存儲在數組變量word
。 數組大小取自初始化程序的大小,即6(5個字符加上0終止符)。 零值字節用作strlen
, strcpy
, strcat
類的字符串處理函數以及使用%s
和%[
轉換說明符的printf
和scanf
參數)的前哨值。
相比之下,
char arr[] = { 'h', 'e', 'l', 'l', 'o' };
存儲一個字符值序列,但是由於沒有終止的0值字節,因此該序列不被視為string ,並且您不希望將其用作任何字符串處理函數的參數(因為沒有終結符,因此該函數無法知道字符串在哪里結束,並且最終將試圖訪問數組外部的內存,這可能導致從垃圾輸出到崩潰的任何事情。
沒有看到lab8.h
的內容,我將推測string
類型是char
數組的typedef,類似於
#define MAX_STRING_LENGTH 20 // or some other value
typedef char string[MAX_STRING_LENGTH];
因此, string
數組就是char
數組的數組; 相當於
char words[MAX_COUNT][MAX_STRING_LENGTH];
所以每個words[i]
是char
的N個元素的數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.