繁体   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