我在C语言里工作,我得把几件事连在一起.

现在我有这个:

message = strcat("TEXT ", var);

message2 = strcat(strcat("TEXT ", foo), strcat(" TEXT ", bar));

现在,如果你有C语言的经验,我相信你会意识到,当你试图运行它时,这会给你一个分段错误.那么我该如何解决这个问题呢?

推荐答案

在C语言中,"字符串"只是普通的char个array.因此,您不能直接将它们与其他"字符串"连接在一起.

可以使用strcat函数,将src指向的字符串附加到dest指向的字符串的末尾:

char *strcat(char *dest, const char *src);

这是一个example from cplusplus.com:

char str[80];
strcpy(str, "these ");
strcat(str, "strings ");
strcat(str, "are ");
strcat(str, "concatenated.");

对于第一个参数,需要提供目标缓冲区本身.目标缓冲区必须是字符数组缓冲区.例如:char buffer[1024];

Make sure确保第一个参数有足够的空间来存储您试图复制到其中的内容.如果可用,使用像:strcpy_sstrcat_s这样的函数会更安全,在这些函数中,您必须显式指定目标缓冲区的大小.

Note:字符串文字不能用作缓冲区,因为它是常量.因此,您必须始终为缓冲区分配一个字符array.

返回值strcat可以忽略,它只返回与第一个参数相同的指针.它的存在是为了方便,并允许您将调用链接到一行代码中:

strcat(strcat(str, foo), bar);

所以你的问题可以解决如下:

char *foo = "foo";
char *bar = "bar";
char str[80];
strcpy(str, "TEXT ");
strcat(str, foo);
strcat(str, bar);

C++相关问答推荐

当办公室阻止Visual Studio时编码和编译C

C中char数组指针的问题

C/C++中的状态库

需要大整数和浮点数.使用long long int和long double

如何在Visual Studio代码中关闭此函数名称显示功能?

仅在给定的大小和对齐方式下正确创建全局

为什么我会收到释放后堆使用错误?

在for循环中指向数组开头之前

从C文件中删除注释

如何使用唯一数字对整型进行分区

是否定义了此函数的行为?

如何确保我将使用C标准库函数的函数版本,如&getc";,而不是类似函数的宏版本?

CS50判断灯泡运动的问题,判断时多出一个灯泡,但不在终端上

为什么编译器不能简单地将数据从EDI转移到EAX?

如何将两个uint32_t值交织成一个uint64_t?

当我将偏移量更改为任何非零值时,C中的mmap共享内存出现无效参数错误

浮点正零何时不全为零?

通过char*访问指针的对象表示是未定义的行为吗?

使用复合文字数组初始化的指针数组

nullptr_t 是否会 destruct 类型双关或指针转换?