探索 'typedef' 创建有限的字符串数据类型?
Exploring 'typedef' to create a limited string data type?
我正在尝试创建自己的字符串数据类型,谁能告诉我我在 typedef 和初始化方面做错了什么。
#include<stdio.h>
#include<conio.h>
typedef char string[10];
int main(){
string myName;
myName = "Tayyab";
printf("This is %s", myName);
getch();
}
你不能给数组赋值,但你可以初始化它:
string myName = "Tayyab";
您正在 typedef
创建一个 char
的数组,您不能对其进行赋值,但是您可以将字符复制到其中或将其赋值给单个元素,例如
myName[0] = 'T';
myName[1] = 'a';
myName[2] = 'y';
myName[3] = 'y';
myName[4] = 'a';
myName[5] = 'b';
myName[6] = '[=10=]' /* <- you should add a null terminator (c style strings) */;
或
strncpy(myName, "Tayyab", sizeof(myName));
但请注意,如果源字符串中不存在 null
终止符 '[=15=]'
,则第二种情况可能会省略。
当然,您可以使用 ouah 建议的初始化语法。
如果您删除 typedef
并将其用法替换为 typedef
应该代表的内容,您的 main
函数将变为:
int main(){
char myName[10];
myName = "Tayyab";
printf("This is %s", myName);
getch();
}
如果你知道这条线的原因
myName = "Tayyab";
这个版本错了,你知道你的问题的答案了。
我实际上做的是C语言不允许的。首先,我定义了一个 string[10]
的字符数组,然后在下一条语句中,我为它分配了一个字符串值,这只有在我同时分配和初始化字符数组时才有可能。
所以在其他情况下,我必须一个一个地分配每个字符,或者我可以使用 strcpy() 一步步将字符串值复制到我的字符数组中。
我正在尝试创建自己的字符串数据类型,谁能告诉我我在 typedef 和初始化方面做错了什么。
#include<stdio.h>
#include<conio.h>
typedef char string[10];
int main(){
string myName;
myName = "Tayyab";
printf("This is %s", myName);
getch();
}
你不能给数组赋值,但你可以初始化它:
string myName = "Tayyab";
您正在 typedef
创建一个 char
的数组,您不能对其进行赋值,但是您可以将字符复制到其中或将其赋值给单个元素,例如
myName[0] = 'T';
myName[1] = 'a';
myName[2] = 'y';
myName[3] = 'y';
myName[4] = 'a';
myName[5] = 'b';
myName[6] = '[=10=]' /* <- you should add a null terminator (c style strings) */;
或
strncpy(myName, "Tayyab", sizeof(myName));
但请注意,如果源字符串中不存在 null
终止符 '[=15=]'
,则第二种情况可能会省略。
当然,您可以使用 ouah 建议的初始化语法。
如果您删除 typedef
并将其用法替换为 typedef
应该代表的内容,您的 main
函数将变为:
int main(){
char myName[10];
myName = "Tayyab";
printf("This is %s", myName);
getch();
}
如果你知道这条线的原因
myName = "Tayyab";
这个版本错了,你知道你的问题的答案了。
我实际上做的是C语言不允许的。首先,我定义了一个 string[10]
的字符数组,然后在下一条语句中,我为它分配了一个字符串值,这只有在我同时分配和初始化字符数组时才有可能。
所以在其他情况下,我必须一个一个地分配每个字符,或者我可以使用 strcpy() 一步步将字符串值复制到我的字符数组中。