Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 执行字符串连接时发生运行时错误_C_String_Concatenation - Fatal编程技术网

C 执行字符串连接时发生运行时错误

C 执行字符串连接时发生运行时错误,c,string,concatenation,C,String,Concatenation,下面的程序有什么问题 main( ) { char *str1 = "United" ; char *str2 = "Front" ; char *str3 ; str3 = strcat ( str1, str2 ) ; printf ( "\n%s", str3 ) ; } 我不能编译上面的程序,它总是给我运行时错误。我正在尝试连接这两个字符串。上面的程序有错误吗 谢谢。您正试图修改字符串文字,但您的编译器(和运行时支持)不允许。当您这样做时,您正在调用“未定义的

下面的程序有什么问题

main( ) 
{ 
 char *str1 = "United" ; 
 char *str2 = "Front" ; 
 char *str3 ; 
 str3 = strcat ( str1, str2 ) ; 
 printf ( "\n%s", str3 ) ; 
} 
我不能编译上面的程序,它总是给我运行时错误。我正在尝试连接这两个字符串。上面的程序有错误吗


谢谢。

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

您需要为字符串分配足够的(可写)内存,可能如下所示:

#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);
}
#包括
#包括
内部主(空)
{
char*str1=“联合”;
char*str2=“前面”;
char str3[64];
strcpy(str3,str1);
strcat(str3,str2);
printf(“%s\n”,str3);
返回(0);
}

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

您需要为字符串分配足够的(可写)内存,可能如下所示:

#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);
}
#包括
#包括
内部主(空)
{
char*str1=“联合”;
char*str2=“前面”;
char str3[64];
strcpy(str3,str1);
strcat(str3,str2);
printf(“%s\n”,str3);
返回(0);
}

使您的
char*str1=“United”
成为

char str1[]=“联合”


您需要为目标缓冲区
str1
分配内存
str3
还将在结果中接收
str1
的地址strcat'不会检查目标缓冲区(str1)中的空间可用性。程序员必须处理好它。

让您的
char*str1=“United”
成为

char str1[]=“联合”


您需要为目标缓冲区
str1
分配内存
str3
还将在结果中接收
str1
的地址strcat'不会检查目标缓冲区(str1)中的空间可用性。程序员必须处理它。

当您声明
char*str=“someText”
时,基本上是初始化一个指向无法更改的字符串常量的指针,该字符串常量位于计算机内存中的某个位置

之后,通过使用函数
strcat()
尝试更改字符串常量,我们称之为常量- 这种行为编译时不会出错,但会导致程序在运行时崩溃,因为
常量(constant)在运行时工作,并且不像
#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;
}
#包括
#包括
内部主(空){
char*str1=“你好,”;
char*str2=“世界”;
char-str3[30];
strcpy(str3,str1);
strcat(str3,str2);
printf(“%s\n”,str3);
printf(“\n\n\n”);
返回0;
}
希望有帮助!
祝你将来好运

当您声明
char*str=“someText”
时,基本上是初始化一个指向无法更改的字符串常量的指针,该常量位于计算机内存中的某个位置

之后,通过使用函数
strcat()
尝试更改字符串常量,我们称之为常量- 这种行为编译时不会出错,但会导致程序在运行时崩溃,因为
常量(constant)在运行时工作,并且不像
#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;
}
#包括
#包括
内部主(空){
char*str1=“你好,”;
char*str2=“世界”;
char-str3[30];
strcpy(str3,str1);
strcat(str3,str2);
printf(“%s\n”,str3);
printf(“\n\n\n”);
返回0;
}
希望有帮助!
祝你将来好运

多么糟糕的事情!™" 是什么意思?这意味着你的程序运行不可靠……但这并不意味着“坏东西”上有商标!™'.多么糟糕的事情!™“是什么意思?这意味着你的程序运行不可靠……但这并不意味着“坏东西”上实际上有商标!™'.