对于C中固定长度的字符串,最合理的数组声明是什么?

时间:2013-10-04 15:43:49

标签: c arrays string

我是C的新手,所以这个问题可能听起来很愚蠢。我总是有一个长度为2的const char *变量。现在我需要将它传递给struct变量。 struct变量应该是char数组[2](因为它总是只需要两个字节)或者是char *。我之所以要问的是,使用char *将为指针创建空间(4字节或8字节)但我真的只需要2个字节。这是最好的方法吗?如果使用char数组[]是更好的方法,我应该使用strcpy将char *变量复制到char数组[] ??

2 个答案:

答案 0 :(得分:5)

如果您确信它总是2个字节,那么使用数组就没有问题。只需始终使用strncpy和朋友确保您不会超支。记住要使它长3个字节以容纳null char。您可以获取指向数组的指针以进行阅读,其行为与char*malloc内存的行为相同。

答案 1 :(得分:0)

  

“我有一个长度为2的const char * 变量。现在我需要将它传递给结构变量”

如果您知道该字符串的长度始终为2,则使用固定大小为3的数组(包括空终止字符)是完全合理的:

struct myStruct {
    char code[3];
};

和某处:

struct myStruct m;
const char* src = "ab"; 
strncpy(&myStruct.code[0], src, 3);

但是如果你无法确保src的长度不超过2,你最好这样做:

strncpy(&myStruct.code[0], src, 2);
myStruct.code[2] = '\0';