下面的程序有什么问题?
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 ) ;
}
我无法编译上述程序,它总是给我运行时错误。我正在尝试连接两个字符串。上面的程序有错误吗?
谢谢。
让你char *str1 = "United"
成为
char str1[<required memory for concatenated resultant string>] = "United"
.
您需要为目标缓冲区分配内存,即str1
. 也将在结果中str3
收到地址。str1
'strcat' 不会检查目标缓冲区 (str1) 中的空间可用性。程序员必须照顾它。
您正在尝试修改字符串文字,但您的编译器(和运行时支持)不会让您这样做。当您这样做时,您正在调用“未定义的行为”,这是一件坏事!™ 任何事情都可能发生;程序崩溃是合法的。避免未定义的行为。
您需要为字符串分配足够的(可写)内存,可能是这样的:
#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 *str = "someText"
,基本上,您初始化了一个指向无法更改的字符串常量的指针,该指针位于计算机内存中的某个位置。
之后,通过使用strcat()
您尝试更改该字符串常量的函数,我们说它是常量 - 这种行为编译时没有错误,但会导致您的程序在运行时崩溃,因为const
(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;
}
希望有帮助!祝你未来好运!