以下程序有什么问题?
main( )
{
char *str1 = "United" ;
char *str2 = "Front" ;
char *str3 ;
str3 = strcat ( str1, str2 ) ;
printf ( "\n%s", str3 ) ;
}
我无法编译上面的程序,它总是给我运行时错误。我试图连接两个字符串。上述程序有错误吗?
感谢。
答案 0 :(得分:3)
将char *str1 = "United"
设为
char str1[<required memory for concatenated resultant string>] = "United"
。
您需要为目标缓冲区分配内存str1
。 str3
也会在结果中收到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;
}
希望有所帮助! 祝你好运!