簡體   English   中英

在C函數中,char和string有什么區別?

[英]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終止符)。 零值字節用作strlenstrcpystrcat類的字符串處理函數以及使用%s%[轉換說明符的printfscanf參數)的前哨值。

相比之下,

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM