如何在单实例操作中将多个char *变量复制到一个char *中。
说我有
char * text1 =“Hello”;
char * text2 =“World”;
我想在单个函数调用中将text1,text2和'2'以及“12345”复制到char * text3中。
答案 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(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的新指针,该指针指向内存中串联的开始。