如何在C中覆盖部分字符串?

spi*_*dev 3 c c-strings

我有一个字符串.我只想更改字符串的开头几个字符,并保留原样.在C中执行此操作的最佳方法是什么?

#include <stdio.h>
#include <string.h>

int main() {
    char src[40];
    char src2[40];
    char dest[12];

    memset(dest, '\0', sizeof(dest));
    strcpy(src, "This is a string");
    strcpy(src2, "That");
    strncpy(dest, src, sizeof(src));
    strncpy(dest, src2, sizeof(src2));

    printf("Final copied string : %s\n", dest);
}
Run Code Online (Sandbox Code Playgroud)

我希望将字符串更改"This is a string""That is a string".

有没有一种简单的方法可以实现这个我想念的东西?

dbu*_*ush 8

这里有一些问题.

首先,dest只有12个字节长,这太短而无法容纳"这是一个字符串".尝试复制该字符串dest将超出缓冲区.这会调用未定义的行为.至少要20个字节.

第二个sizeof(src)给出整个数组的大小,即40,而不是字符串的长度.如果目标缓冲区不够大,这也会给出未定义的行为.请strlen改用.同样的道理sizeof(src2).

有了这些变化,你应该这样:

#include <stdio.h>
#include <string.h>

int main() {
    char src[40];
    char src2[40];
    char dest[20];

    memset(dest, '\0', sizeof(dest));
    strcpy(src, "This is a string");
    strcpy(src2, "That");
    strncpy(dest, src, strlen(src));
    strncpy(dest, src2, strlen(src2));

    printf("Final copied string : %s\n", dest);
}
Run Code Online (Sandbox Code Playgroud)