如何在没有空终止符的情况下初始化char数组

如何在没有空终止符的情况下初始化char数组

本文介绍了如何在没有空终止符的情况下初始化char数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

char数组是网络消息的一部分,具有明确的长度,因此不需要空终止符。

The char array is a part of network message, which has well defined length, so the null terminator is not needed.

struct Cmd {
    char cmd[4];
    int arg;
}

struct Cmd cmd { "ABCD" , 0 }; // this would be buffer overflow

如何初始化此cmd成员char数组?而不使用 strncpy

How can I initialize this cmd member char array? without using functions like strncpy?

推荐答案

char 数组的大小与初始化程序中的字符数相同。因此 cmd 将没有空终止符。

Terminating null character is ignored if the size of the char array is the same as the number of characters in the initializer. So cmd will not have the null terminator.

C11标准(n1570)中的相关部分是:

The relevant section in the C11 standard (n1570) is 6.7.9/14:

语句:

struct Cmd cmd { "ABCD" , 0 };

应为:

struct Cmd cmd  = { "ABCD" , 0 };

这篇关于如何在没有空终止符的情况下初始化char数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 09:56