我有一个类型定义如下的结构。
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);