我有以下代码:
char *string = malloc(strlen(stringa) + strlen(stringb) + 1);
strcpy(string, stringa);
strcpy(string+strlen(stringa), stringb);
问题是,我正在做的事情,stringa
有时是NULL,当它被复制到string
时,它会在一开始就产生未初始化的字符string
。这是stringa恰好为NULL时我得到的输出示例:
�����o
This is a test
To see the output
of string
我想摆脱刚开始未初始化的角色。到目前为止我尝试做的是:
memset(string, 0, strlen(string));
和
memset(string, 0, sizeof(string));
两者都给了我错误,但没有解决我的问题。任何人都知道如何编辑' string'摆脱未初始化的角色?这可以应用于'字符串'直接或者#string;'在将其复制到'字符串'。
之前答案 0 :(得分:1)
在开始复制字符串之前,您始终可以使用条件语句对字符串的值运行一些逻辑测试:
选项1:
char* string;
size_t length = 0;
if (stringa != NULL) {
length += strlen(stringa);
}
if (stringb != NULL) {
length += strlen(stringb);
}
string = malloc(length + 1);
// Copy the strings
选项2:
char* string = NULL;
if (stringa != NULL) {
string = malloc(strlen(stringa) + 1);
strcpy(string, stringa);
}
if (stringb != NULL) {
if (string != NULL) {
string = realloc(string, strlen(stringb) + 1);
strcat(string, stringb);
} else {
string = malloc(strlen(stringb) + 1);
strcpy(string, stringb);
}
}
答案 1 :(得分:0)
在非常老的C中,在许多平台上,nul字节恰好被硬编码到内存中的位置零,因此空字符串和空字符串之间没有区别。如果你想到这一点,有点奇怪的区别,没有一串香肠和一串没有香肠。
通过包装strcpy
,您可以轻松地恢复旧行为char *strcpy_oldbehaviour(char *dest, const char *src)
{
if(src)
return strcpy(dest, src);
else
return strcpy(dest, "");
}