1

下面的程序有什么问题?

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

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

谢谢。

4

3 回答 3

3

让你char *str1 = "United"成为

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

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

于 2013-06-10T04:59:59.390 回答
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);
}
于 2013-06-10T04:42:24.213 回答
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;
}

希望有帮助!祝你未来好运!

于 2013-06-10T13:24:16.027 回答