执行字符串连接时出现运行时错误

时间:2013-06-10 04:40:13

标签: c string concatenation

以下程序有什么问题?

main( ) 
{ 
 char *str1 = "United" ; 
 char *str2 = "Front" ; 
 char *str3 ; 
 str3 = strcat ( str1, str2 ) ; 
 printf ( "\n%s", str3 ) ; 
} 

我无法编译上面的程序,它总是给我运行时错误。我试图连接两个字符串。上述程序有错误吗?

感谢。

3 个答案:

答案 0 :(得分:3)

char *str1 = "United"设为

char str1[<required memory for concatenated resultant string>] = "United"

您需要为目标缓冲区分配内存str1str3也会在结果中收到str1的地址。 'strcat'不会检查目标缓冲区(str1)中的空间可用性。程序员必须照顾它。

答案 1 :(得分:2)

您正在尝试修改字符串文字,但您的编译器(和运行时支持)不会允许您。当你这样做时,你正在调用'未定义的行为',这是一件坏事!™任何事情都可能发生;程序崩溃是合法的。避免未定义的行为。

你需要为字符串分配足够的(可写的)内存,可能是这样的:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char *str1 = "United";
    char *str2 = "Front";
    char  str3[64];
    strcpy(str3, str1);
    strcat(str3, str2);
    printf("%s\n", str3);
    return(0);
}

答案 2 :(得分:0)

当你声明char *str = "someText"时,基本上,你初始化一个指向一个无法改变的字符串常量的指针,它位于你计算机内存的某个地方。

之后使用函数strcat(),你试图改变那个字符串常量,我们说这是常数 - 此类行为编译时没有错误,但会导致程序在运行时崩溃,因为const(常量)在运行时期间工作,并且不会像#define那样进行预编译。

您可能会遇到不同的解决方案,

#include<stdio.h>
#include<string.h>

int main(void) {

    char* str1 = "Hello,";
    char* str2 = " World";
    char str3[30];

    strcpy(str3, str1);
    strcat(str3, str2);

    printf("%s\n", str3);
    printf("\n\n\n");
    return 0;
}

希望有所帮助! 祝你好运!