2013-06-10 2 views
1

В чем проблема с программой ниже?Ошибка выполнения при выполнении конкатенации строк

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

Я не могу скомпилировать вышеуказанную программу, и она всегда дает мне ошибку времени выполнения. Я пытаюсь объединить две строки. Есть ли ошибка в вышеуказанной программе?

Спасибо.

ответ

2

Вы пытаетесь изменить строковый литерал, но ваш компилятор (и поддержка времени выполнения) не позволит вам. Когда вы это делаете, вы вызываете «неопределенное поведение», которое является Bad Thing! ™ Все может случиться; это законно для программы, чтобы потерпеть крах. Избегайте неопределенного поведения.

Вам нужно выделить достаточно памяти (перезаписываемый) для строк, может быть, как это:

#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); 
} 
+0

Что означает «плохая вещь!»? –

+0

Это означает, что ваша программа не будет вести себя надежно ... но это не значит, что на «Bad Thing! ™» есть товарный знак. –

3

Сделать свой char *str1 = "United" в

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

Вам необходимо выделить память для целевого буфера, который равен str1. str3 также получит адрес str1. «strcat» не будет проверять наличие свободного места в буфере назначения (str1). Программист должен позаботиться об этом.

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; 
} 

Надежда, что помогает! Удачи в будущем!

Смежные вопросы