![](/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.