【问题标题】:why str1 not printing properly?为什么 str1 不能正确打印?
【发布时间】:2021-04-13 21:51:09
【问题描述】:
#include<stdio.h>
void my_strconcat(char*, char*);

int main()
{
    char s1[] = "HelloGoodMorningEveryone1";
    char s6[] = "How";
    printf("String Concatenate Start! \n");
    my_strconcat(s1, s6);
    printf("s1:%s s6:%s \n", s1, s6);
    return 0;
}
void my_strconcat(char *src, char *dest)
{    
    while(*dest)
        dest++;
    while(*src) {
        *dest++ = *src++;
    }
    *dest = '\0';
}

输出: 字符串连接开始! s1:helloGoodMorningEveryone1 s6:HowHelloGoodMorningEveryone1

【问题讨论】:

  • char s6[] 这不会为 s1 字符串保留附加空间,因此 my_strconcat 会溢出缓冲区。
  • @dxiv,s6
  • @dxiv 实际上s6 是目标缓冲区。
  • 另请注意,大多数字符串函数是str...(char *dest, char *src)。因此,您可能会在交换订单时注入混乱。您可以随意这样做,只要确保您在稍后致电strcpy()strcat() 时保持直截了当。

标签: arrays c string c-strings


【解决方案1】:

您的目标缓冲区没有剩余空间用于存储连接结果。因此,在函数内部,您实际上超出了分配的内存,创建了undefined behavior

你需要为目标缓冲区分配足够的空间,比如

 char s6[128] = "How";

以便它能够在您尝试存储结果之前存储连接的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 2012-09-13
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多