在C函数中,char和string之间的区别是什么?

时间:2014-11-13 13:03:38

标签: c string char

我使用了我老师的模板,并在代码的开头说:

#include "lab8.h"

void main(void)
{
int response;
int count;
string words[MAX_COUNT];

稍后在函数中,将大量单词放入单词字符串中。所以我就像看着最后一行并感到困惑。我以为char声明了字符串?这最后一行甚至做了什么?我后来在几个函数参数列表中也注意到,输入了#34;字符串字"而不是我所期望的提及char或其他东西。

编辑:

typedef char string[MAX_LENGTH];

写在.h文件中没有看到它。

2 个答案:

答案 0 :(得分:2)

C没有名为string的基本data type

仔细检查lab8.h文件。通常,string应为unsigned char的typedef。

基本上,string words[MAX_COUNT];定义了一个变量类型string的数组,其中包含MAX_COUNT个变量。

答案 1 :(得分:0)

C没有专用的字符串数据类型。在C中,字符串是一系列字符值,后跟零值字节。字符串存储为char的数组,但并非所有char数组都包含字符串。

例如,

char word[] = { 'h', 'e', 'l', 'l', 'o', 0 };

将字符串"hello"存储在数组变量word中。数组大小取自初始化程序的大小,即6(5个字符加0终结符)。零值字节用作字符串处理函数的标记值,如strlenstrcpystrcat,以及使用printfscanf的参数%s%[转换说明符。

相比之下,

char arr[] = { 'h', 'e', 'l', 'l', 'o' };

存储一系列字符值,但由于没有终止0值字节,因此该序列不被视为字符串,并且想要将它用作任何字符串处理函数的参数(因为没有终结符,函数无法知道字符串结束的位置,并且最终会尝试访问数组外部的内存,这可能导致从垃圾输出到崩溃的任何事情。

在没有看到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元素数组。