探索 '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() 一步步将字符串值复制到我的字符数组中。