在C中替换字符串前缀的正确方法

疯狂物理学家

我的目标是替换n字符串中的前(3)个字符,而不会收到任何编译器警告或触发未定义的行为:

const char *replacment = "abc";
char buffer[128] = "xxx-remainder";

我只在标准库中使用gcc(GCC)9.2.0:

  1. sprintf似乎是replacement在告诉我,不要通过使用来插入NUL字符

    sprintf(buffer, "%.3s", replacement);
    printf("%s\n", buffer);   /// prints "abc", not "abc-remainder"
    
  2. 使用strncpy会引发警告:

    strncpy(buffer, replacement, 3);
    

    这会触发以下警告:

    test.c: In function 'main':
    main.c:8:5: warning: 'strncpy' output truncated before terminating nul copying 3 bytes from a string of the same length [-Wstringop-truncation]
     8 |         strncpy(buffer, replacement, 3);
       |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    

    在这种情况下,输出看起来不错。

  3. 当然,我可以使用for循环手动复制字符,但是我试图避免这种情况。

如何解决这里显示的两种方法,或者通过什么替代函数调用可以替换前3个字符,而无需在字符串中插入NUL或得到警告?

大卫·拉涅里(David Ranieri)
memcpy(buffer, replacement, strlen(replacement));

是您要寻找的。

另一种(非常模糊的)方式:

char c = buffer[strlen(replacement)];
buffer[snprintf(buffer, sizeof buffer, "%s", replacement)] = c;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从C中的字符串替换字符

来自分类Dev

从php中具有相同前缀的数组中替换字符串中单词的有效方法

来自分类Dev

C中的字符串替换

来自分类Dev

替换引号后转义字符串的正确方法?

来自分类Dev

替换引号后转义字符串的正确方法?

来自分类Dev

用回调替换字符串的正确方法

来自分类Dev

替换字符串中的变量并正确允许转义

来自分类Dev

如何正确替换脚本中包含空格的字符串

来自分类Dev

在C中替换字符串中的字符

来自分类Dev

如何用前缀字符串替换数组中的所有元素?

来自分类Dev

正则表达式替换以删除字符串前缀中的数字

来自分类Dev

替换Java中没有特定前缀和后缀的字符串

来自分类Dev

正则表达式替换以删除字符串前缀中的数字

来自分类Dev

如何替换文件中以某个前缀开头的所有字符串

来自分类常见问题

如何从字符串中删除前缀?

来自分类常见问题

从字符串中删除前缀

来自分类Dev

在TSQL中删除字符串的前缀

来自分类Dev

替换字符串中重复字符的最佳方法

来自分类Dev

Replace 方法不替换字符串中的字符

来自分类Dev

字符串的前缀

来自分类Dev

如何使用Javascript替换不规则的字符串前缀?

来自分类Dev

替换所有以某些前缀开头的字符串

来自分类Dev

使用前缀列表从字符串中删除前缀

来自分类Dev

用C中的字符替换字符串

来自分类Dev

用字符串中的basic替换重音字符-+/--> a,ć-> c

来自分类Dev

Objective-C:随机替换字符串中的字符

来自分类Dev

替换C#字符串中的字符

来自分类Dev

在字符串中替换\“

来自分类Dev

C 中字符串管理的指针:替换字符串中的特定字符