我使用了我老师的模板,并在代码的开头说:
#include "lab8.h"
void main(void)
{
int response;
int count;
string words[MAX_COUNT];
稍后在函数中,将大量单词放入单词字符串中。所以我就像看着最后一行并感到困惑。我以为char声明了字符串?这最后一行甚至做了什么?我后来在几个函数参数列表中也注意到,输入了#34;字符串字"而不是我所期望的提及char或其他东西。
编辑:
typedef char string[MAX_LENGTH];
写在.h文件中没有看到它。
答案 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终结符)。零值字节用作字符串处理函数的标记值,如strlen
,strcpy
,strcat
,以及使用printf
和scanf
的参数%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元素数组。