打印CString之前会打印未知文本

时间:2019-02-13 17:47:26

标签: c printf

不幸的是,此代码似乎在打印实际文本之前先打印了一些内容。这是什么?为何打印?

“ \ 300 \ 367 \ 277 \ 357 \ 376”

我在代码中更经常地意识到这一点,并且我确信这暗示我做错了什么。

// uids are: EUID=1001, RUID=1000
setreuid(1001, 1000) ; // works because EUID=1001 and RUID=1000
// uids are: EUID=1000, RUID=1001
setreuid(1000, 1001); // works because EUID=1000 and RUID=1001

1 个答案:

答案 0 :(得分:0)

即使我们忽略了对不安全且不再受支持的函数gets的调用,从您的concat函数开始,此代码也存在许多问题:

char* concat(const char *s1, const char *s2)
{
   char *result = malloc(strlen(s1) + strlen(s2) + 1); 
   strcpy(result, s1);
   strcat(result, s2);
   return result;
}

concat未初始化时,您正在通过以下行呼叫buf = concat(buf, lastchars);buf。换句话说:

char *result = malloc(strlen(buf) + strlen(lastwords) + 1);
strcpy(result, buf);
strcat(result, lastwords);
return result;

什么是strlen(buf)?这是未定义的行为,因为buf不包含带有空终止符的字符串。

然后,strcpy(result, buf)也是未定义的行为,因为buf未初始化。

然后返回result并将其分配回buf

用此代码很难理解您的意图,因此我无法提供解决方案-仅指出众多问题。