我有一个类型定义如下的结构。

typedef struct {
    short cmdLength;
    char cmdRequest[126];
} cmdRequest_t;

然后在主程序中有以下代码。
char *command = "d tcpip\0";
printf("command: %s\n", command);
size_t cmdLen = strlen(command);
printf("size: %zu\n", cmdLen);
cmdRequest_t cmdRequest = {(short) cmdLen, *command};
printf("size: %hi\n", cmdRequest.cmdLength);
printf("command: %s\n", cmdRequest.cmdRequest);

但是,我的输出如下。
command: d tcpip
size: 7
size: 7
command: d

大小仍然正确,但由于某些原因,命令被截断为一个字母。你知道为什么会这样吗?

最佳答案

结果是。。。

cmdRequest_t cmdRequest = {(short)cmdLen, *command};

这将初始化cmdRequest的成员cmdRequest作为command的解引用,或者换句话说,您将以字符串中的第一个字符结束。在那之后实际上没有0太容易了,所以printf()不起作用。如果你改变了一些不相关的事情,你可能完全有了这样的输出。。。
command: d%$232!>~11cCV224
mysh: program received SIGSEGV, Segmentation fault

改为。。。
#include <string.h>

cmdRequest_t cmdRequest;
cmdRequest.cmdLength = (short)cmdLen;
strncpy(cmdRequest.cmdRequest, command, sizeof(cmdRequest.cmdRequest) - 1);

09-06 06:55