将多个char *复制到一个char *变量C语言中

时间:2010-06-11 12:13:41

标签: c

如何在单实例操作中将多个char *变量复制到一个char *中。

说我有

char * text1 =“Hello”;

char * text2 =“World”;

我想在单个函数调用中将text1,text2和'2'以及“12345”复制到char * text3中。

8 个答案:

答案 0 :(得分:3)

char text3[100];
sprintf( text3, "%s%s%s%s", text1, text2, "2", "12345" ); 

答案 1 :(得分:2)

要在 函数调用中执行此操作,您需要在您的平台上提供asprintf()(或者,相同的库实现) 。大多数现代C库都提供它,但您可能必须通过预处理器将其作为扩展。

以Linux为中心的例子,你想要的东西(我相信它会返回一个已分配/组合的字符串):

#define _GNU_SOURCE /* Telling the compiler we want extensions */
#include <stdio.h>

int main(void)
{
   char *text1 = "foo";
   char *text2 = "bar";
   char *text3 = NULL;
   int bytes_printed = 0;

   bytes_printed = asprintf(&text3, "%s%s123456789", text1, text2);
   if (bytes_printed < 0 || text3 == NULL) {
      fprintf(stderr, "Asprintf failed to allocate memory!\n");
      return 1;
   }

   printf("Asprintf printed %d bytes to text3, which is %s\n",
      bytes_printed, text3);
   free(text3);
   return 0;
}

这是我在 函数调用中执行此操作的唯一方法,返回已分配的字符串。

为了确保它的可移植性,您应该在树中使用它的库实现,类似于my_asprintf(),它可以有效地处理不提供它的系统。

你可以把它从glibc的C库源中拉出来,我相信BSD,甚至像HelenOS这样的新操作系统都能提供它。

答案 2 :(得分:2)

这会自动调整string3的大小,以便它可以保持输出而不会出现缓冲区溢出

const char * string1 = "Hello";
const char * string2 = "World";
char * string3 = NULL;
size_t string3_size = snprintf(NULL,0,"%s%s%s",string1,string2,"1234");
string3 = realloc(string3,string3_size+1); // +1 for '\0'
snprintf(string3,string3_size+1,"%s%s%s",string1,string2,"1234");

答案 3 :(得分:0)

的sprintf


这应该可以解决问题:

sprintf(test3, "%s%s%s%s", text1, text2, "2" , "12345");

古德勒克!!
- CVS

答案 4 :(得分:0)

试试这个 strcat()函数:

组合两个字符串时,将一个字符串的字符添加到其他字符串的末尾。此过程称为连接。 strcat()函数将2个字符串连接在一起。它采用以下形式

strcat的(字符串1,字符串)

string1&amp; string2是字符数组。执行函数strcat时,string2将附加到string1。 string2的字符串保持不变。

实施例

的strcpy(字符串1” SRI”); 的strcpy(字符串2”至尊主”); 的printf(“%S”,的strcat(字符串1,字符串);

从上面的程序段中,string1的值变为sribhagavan。 str2的字符串保持不变为bhagawan。

答案 5 :(得分:0)

这样的东西?

char* text1 = "Hello";
char* text2 = "World";
char* phrase = (char *)malloc((char)*15);
snprintf(phrase, 15, "%s %s", text1, text2);

答案 6 :(得分:0)

使用sprintf函数并将所有字符串打印到结果字符串。

答案 7 :(得分:0)

我认为你在这里没有意识到的是,C中的"string"是一个表达式,它指向一个指向内存中静态分配的's'字符的char指针。在下一个地址中有一个't',然后是'r',一直到'g',然后是null个字符。这就是字符串在C中的工作方式,就是库函数处理它们的方式。他们只是遍历它们,直到找到null

所以在这种情况下,你想要的是从null删除最后一个"Hello",然后用其余的替换它。 strcat这样做,它需要指向字符后跟其他字符,最后是空字符。并返回一个指向另一个char的新指针,该指针指向内存中串联的开始。