我有以下代码,其中strcat导致问题。
char* tokens = strtok(buf, "+");
int n = 0;
int type = 0;
char* name = "";
char* lifetime = "";
char* data = "";
for(n=0; tokens!=NULL; n++) {
if(n==0)
type = atoi(tokens);
if(n==1)
name = tokens;
if(n == 2) {
if(type == 1)
lifetime = tokens;
else
data = tokens;
}
if(n == 3)
lifetime = tokens;
tokens = strtok(NULL, "+");
}
if(type == 2) {
printf("Received Data with Name: %s, Data: \"%s\" and lifetime: %s seconds\n", name, data, lifetime);
strncat(name, "+", 1);
printf("Data: %s\n", data);
strncat(name, data, strlen(data));
printf("Full Name: %s\n", name);
}
在我打印名称,数据和生命周期的行中,所有内容都正确打印。但是在strcat操作之后我发现data
值为空。添加调试printf语句后,我发现data
后strncat(name,"+",1)
值变为空。可能是什么原因?请帮忙。
答案 0 :(得分:1)
您必须分配名称和数据
strncat(name, "+", 1);
这里没有分配名称你不能将'+'复制到名称,因为没有保留的内存来做那个
答案 1 :(得分:1)
名称和数据指针都指向buf字符串。连接到名称字符串时,您可能碰巧用空字符覆盖数据字符串。在写入之前,您需要为name分配一个新的缓冲区:
char resultingName[BUFFER_LENGTH];
strcpy(resultingName, name);
strncat(resultingName, "+", 1);
[...]