30/09/2018, 20:04
In xau bi loi c++
#include <iostream>
#include <string.h>
using namespace std;
char * xinChao( char name[50])
{
char mang[100] ="Hello, ";
char *result;
strcat(mang, name);
result = mang;
return result;
}
int main ()
{
char name[50] = "You";
cout<< xinChao(name);
return 0;
}
Em không hiểu tại sao kết quả in ra lại bị lỗi, mong mọi người giải đáp giùm ,cám ơn mọi người !
Bài liên quan
em đã khai báo thư viện iostream và string.h ạ.
Chuỗi C++ là string chứ ko phải char*. char* là con trỏ tới 1 ký tự.
Vấn đề là ở hàm xinChao. Trong hàm xinChao, các biến như
result
,mang[100]
đều được lưu trên stack, nó chỉ có phạm vi trong hàm xinChao. Khi hàm xinChao kết thúc nó trả về địa chỉ củamang
, nhưng lúc nàymang
vàresult
bị hủy để trả lại vùng nhớ trên stack cho hàm hoặc chương trình khác sử dụng, thành ra xinChao lúc này mang địa chỉ của 1 vùng nhớ mà không xác định rõ giá trị, dẫn đến lỗi segment fault hoặc dẫn tới kết quả không xác định như trường hợp của bạn. Để khắc phục trong hàm xinChao bạn khai báostatic
chomang
tuy nhiên đây là 1 “bad practice”.
cách tốt hơn đó là sử dụng vùng nhớ Heap, như sau:
hoặc:
Em hiểu rồi ,em cảm ơn anh nhiều ạ
Dạ vâng , em cảm ơn anh ạ