我在用C语言工作,我必须把一些东西连接起来。
现在我有这个:
message = strcat("TEXT ", var);
message2 = strcat(strcat("TEXT ", foo), strcat(" TEXT ", bar));
现在,如果你有C语言的经验,我相信你会意识到,当你试图运行它时,这会给你一个分割错误。我该怎么做呢?
我在用C语言工作,我必须把一些东西连接起来。
现在我有这个:
message = strcat("TEXT ", var);
message2 = strcat(strcat("TEXT ", foo), strcat(" TEXT ", bar));
现在,如果你有C语言的经验,我相信你会意识到,当你试图运行它时,这会给你一个分割错误。我该怎么做呢?
当前回答
不限制缓冲区大小的最佳方法是使用asprintf()
char* concat(const char* str1, const char* str2)
{
char* result;
asprintf(&result, "%s%s", str1, str2);
return result;
}
其他回答
int main()
{
char input[100];
gets(input);
char str[101];
strcpy(str, " ");
strcat(str, input);
char *p = str;
while(*p) {
if(*p == ' ' && isalpha(*(p+1)) != 0)
printf("%c",*(p+1));
p++;
}
return 0;
}
请使用strncpy()、strncat()或snprintf()。 超过你的缓冲空间将会破坏内存中的任何东西! (并且记住要为尾随的空“\0”字符留出空间!)
在C语言中,“字符串”只是简单的字符数组。因此,您不能直接将它们与其他“字符串”连接。
你可以使用strcat函数,它将src指向的字符串追加到dest指向的字符串的末尾:
char *strcat(char *dest, const char *src);
下面是一个来自cplusplus.com的例子:
char str[80];
strcpy(str, "these ");
strcat(str, "strings ");
strcat(str, "are ");
strcat(str, "concatenated.");
对于第一个参数,需要提供目标缓冲区本身。目标缓冲区必须是字符数组缓冲区。例如:char buffer[1024];
确保第一个参数有足够的空间存储要复制的内容。如果可以,使用像:strcpy_s和strcat_s这样的函数更安全,其中必须显式指定目标缓冲区的大小。
注意:字符串字面值不能用作缓冲区,因为它是常量。因此,您总是必须为缓冲区分配一个char数组。
strcat的返回值可以简单地忽略,它只返回与作为第一个参数传入的指针相同的指针。它的存在是为了方便,并允许你将调用链接到一行代码中:
strcat(strcat(str, foo), bar);
所以你的问题可以这样解决:
char *foo = "foo";
char *bar = "bar";
char str[80];
strcpy(str, "TEXT ");
strcat(str, foo);
strcat(str, bar);
试试类似的方法:
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[])
{
// Insert code here...
char firstname[100], secondname[100];
printf("Enter First Name: ");
fgets(firstname, 100, stdin);
printf("Enter Second Name: ");
fgets(secondname,100,stdin);
firstname[strlen(firstname)-1]= '\0';
printf("fullname is %s %s", firstname, secondname);
return 0;
}
你可以编写自己的函数,做与strcat()相同的事情,但这不会改变任何东西:
#define MAX_STRING_LENGTH 1000
char *strcat_const(const char *str1,const char *str2){
static char buffer[MAX_STRING_LENGTH];
strncpy(buffer,str1,MAX_STRING_LENGTH);
if(strlen(str1) < MAX_STRING_LENGTH){
strncat(buffer,str2,MAX_STRING_LENGTH - strlen(buffer));
}
buffer[MAX_STRING_LENGTH - 1] = '\0';
return buffer;
}
int main(int argc,char *argv[]){
printf("%s",strcat_const("Hello ","world")); //Prints "Hello world"
return 0;
}
如果两个字符串加起来超过1000个字符长,它将在1000个字符处截断字符串。您可以根据需要更改MAX_STRING_LENGTH的值。