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;
}
希望有帮助!
祝你将来好运 多么糟糕的事情!™" 是什么意思?这意味着你的程序运行不可靠……但这并不意味着“坏东西”上有商标!™'.多么糟糕的事情!™“是什么意思?这意味着你的程序运行不可靠……但这并不意味着“坏东西”上实际上有商标!™'.