如何在C中的字符串前面附加一个字符串

How to append a string in front of string in C

我在 C 中有一个字符串:"Phone/mis. ie Credit Card pmnt"。它的长度是 30 个字符。我想在这个 "R*" 前面附加一个字符串。所以我的最终输出是 "R* Phone/mis. ie Credit Card p"。 字符串在此处截断,因为它的最大长度为 30 个字符。 我试过下面的代码,其中 iov_pPymArr->pymInfoArray[i].type_desc 变量包含字符串 "Phone/mis. ie Credit Card pmnt":

sprintf (iov_pPymArr->pymInfoArray[i].type_desc,"R*%s",iov_pPymArr->pymInfoArray[i].type_desc);

But it gives me output as : "R*R*e/mis. ie Credit Card pmnt". 

R* 被附加了两次,字符串从开头而不是结尾被截断。请告知可能的解决方案。

使用 sprintf 将缓冲区写入自身是 未定义的行为

使用sprintf(或者更好,snprintf)写入另一个临时缓冲区,并将其复制到实际缓冲区。

您不能就地使用 sprintf。您的问题的解决方案是使用临时缓冲区。

如果你想绝对减少你的内存使用量并且你的字符串缓冲区足够大,你可以使用 memmove 在它的前面制作 space (来自 space过去需要存在的空终止符,除非你想要一个段错误)然后 memcpy 前缀到前面,没有终止零。

#define STR " Phone/mis. ie Credit Card p"
#define PREFIX "R*"

#include <stdio.h>
#include <string.h>
int main(){
  char buff[sizeof(STR) + 2] = STR;
  memmove(buff + 2, buff, sizeof(buff) - 2);
  memcpy(buff, PREFIX, 2);
  puts(buff);
}

输出:

R* Phone/mis. ie Credit Card p

注:Appending in the front被称为prepending

使用 sprintf 将缓冲区写入自身是未定义的,并且不是合法的编码方式。请改用 strcat 或临时缓冲区。