如何以这种方式连接字符串?
例如:
char *txt = "Hello";
txt=txt+"World!";
我试过了,但事实并非如此。
答案 0 :(得分:5)
txt
是一个指针,应该为它分配内存。
最好进行以下检查
需要分配的内存量可以通过
计算 size_t size = strlen("Hello") + strlen("World");
char *txt = malloc(size + 1);
在访问malloc()之前检查它的返回值。
if(txt != NULL)
动态地可以这样做:
char *txt = malloc(size+1); /* Number of bytes needed to store your strings */
strcpy(txt,"Hello");
strcat(txt,"World");
分配的内存应在使用后释放,如
free(txt);
或者你也可以
char txt[30];
strcpy(txt,"Hello");
strcat(txt,"World");
答案 1 :(得分:2)
这是连接字符串的经典方法:
char *txt = "Hello";
char *txt2 = "World!";
char *txt3 = malloc(strlen(txt) + strlen(txt2) + 1); // don't forget about ending \0
strcpy(txt3,"Hello");
strcat(txt3,"World");
不要忘记释放分配的内存
答案 2 :(得分:1)
使用malloc避免内存泄漏 - 使用数组
即
char txt[100];
strcpy(txt, "hello");
strcat(txt, "world");
所有C课本都涵盖了这一点
答案 3 :(得分:1)
要正确地执行此操作,您可以使用许多选项来声明char
数组并使用@EdHeal建议的数组,但您应事先知道两个字符串组合的长度,或者您可以溢出数组,并且是undefined behavior。
或者,您使用动态内存分配,但这比调用malloc
和strcpy
更复杂,因为您需要非常小心。
首先,您必须知道在c字符串中需要在字符串末尾添加'\0'
字符,因此在分配内存时应该考虑它。
字符串的长度是通过strlen
函数获得的,你应该尝试每个字符串只使用一次,因为它计算长度,因此它很昂贵而且多次使用它是多余的相同的字符串。
使用malloc
时,系统内存可能会耗尽,在这种情况下,malloc
将返回特殊值NULL
,如果有,则返回pointer的任何操作将是undefined behavior。
最后,当您不再需要构造的字符串时,您必须将资源释放到操作系统usgin free
。
这是我的意思的一个例子
char *text;
size_t lengthOfHello;
size_t lengthOfWorld;
lengthOfHello = strlen("Hello");
lengthOfWorld = strlen("World");
text = malloc(1 + lengthOfHello + lengthOfWorld);
if (text != NULL)
{
strcpy(text, "Hello");
strcat(text, "world");
/* ... do stuff with text ... */
free(text);
}
终止'\0'
已在"Hello"
中,并将由strcpy
复制。