2013-08-22 8 views
0

У меня есть следующая программа, которая не может слить две строки, потому что строка1 не имеет достаточно места для хранения объединенной строки. Если строка1 не имеет достаточного пространства и не использует дополнительный массив для хранения объединенной строки как вернуть объединенную строку?Как слить две строки

#include<stdio.h> 
#include<string.h> 
int main() 
    { 
     void strcat2(char *str1,char *str2); 
     strcat2("john","kris"); 
     getchar(); 
    } 
    void strcat2(char *str1,char *str2) 
    { 
    for (; *str1++;); 
    for (;*str1++ =*str2++;); 

    } 
+6

Так много ** неопределенное поведение **, поэтому мало времени. – WhozCraig

+0

Это может быть полезно http://stackoverflow.com/questions/308695/c-string-concatenation –

+0

использовать malloc, чтобы выделить подходящее место для хранения результата. –

ответ

3

Вы можете попробовать это, как это лучше один или просто выделить более space.:-

#include <stdlib.h> 
#include <string.h> 

char* concat(const char *s1, const char *s2) 
{ 
    char *result = malloc(strlen(s1)+strlen(s2)+1); 

    strcpy(result, s1); 
    strcat(result, s2); 
    return result; 
} 
+0

Предложите 'concat (const char * s1, const char * s2)'. – chux

+0

@chux: - Получил ваш момент. Обновленный ответ также !!! –

2

В C, вы должны сделать свое собственное выделение памяти. Это означает, что в общем случае функции не могут возвращать строки в способе сбора собранных мусором языков. Когда вам нужно вернуть строку из функции, вы должны либо передать строку результата, предварительно назначенную вызывающим, либо распределить ее динамически, и полагаться на вызывающего абонента, чтобы освободить ее.

В C нет ярлыка, вам просто нужно выполнить эту работу.

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