C语言 - 删除字符串中未初始化的空格

时间:2016-05-09 03:30:55

标签: c

我有以下代码:

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;'在将其复制到'字符串'。

之前

2 个答案:

答案 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, "");
}