我有一个字符串.我只想更改字符串的开头几个字符,并保留原样.在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".
有没有一种简单的方法可以实现这个我想念的东西?
这里有一些问题.
首先,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)