中文单词的C语言sizeof,strlen和strncpy

rod*_*_la 2 c

我没有很长时间接触C语言.我有一些与中文单词和strncpy有关的问题.

char* testString = "????"
sizeof(testString) => it prints out 4.
strlen(testString) => it prints out 10.
Run Code Online (Sandbox Code Playgroud)

当我想复制到另一个char数组时,我有一些问题.

char msgArray [7];/*这只是一个例子.由于某些限制,我们限制了缓冲区大小.*/

如果我想复制数据,我需要检查

if (sizeof(testString) < sizeof(msgArray)) {
    strncopy(msgArray, testString, sizeof(msgArray));
}
Run Code Online (Sandbox Code Playgroud)

它会有问题.结果是它只会复制部分数据.

实际上它应该与之相比

if (strlen(testString) < sizeof(msgArray)) {

}
else {
   printf("too long");
}
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么会这样.

如果我想定义限制字符数(包括unicode(例如中文字符),我如何实现定义数组?我想我不能使用char []数组.

非常感谢所有回复.

我的解决方案解决方案:我最终决定剪切字符串以满足有限的字节.

hac*_*cks 5

指针不是数组.testString是一个指针因此,sizeof(testString)将给出指针的大小而不是它指向的字符串.

strlen工作方式不同,仅适用于空终止char数组和字符串文字.它给出了null字符前面的字符串的长度.