#include <stdio.h>
typedef struct _Text {
char *str; //pointer to string
int length; //length of the text
int counter; //counter of text pointing this struct
} *Text;
Text concat(Text txt1, Text txt2){
Text txt= malloc(sizeof(*txt));
txt->length=txt1->length txt2->length;
txt->counter=1;
char str[txt->length];
for(int i=0; txt1->length>i;i ){ //first word concat
str[i]=txt1->str[i];
}
for(int i=0; txt2->length>i;i ){ //second word concat
str[i txt1->length]=txt2->str[i];
}
txt->str=str;
return txt;
}
int main(void) {
Text txt= malloc(sizeof(*txt));
Text txt1= malloc(sizeof(*txt1));
txt->str="hello"; txt->length=5; txt->counter=1;
txt1->str="lo"; txt1->length=2; txt1->counter=1;
concat(txt,txt1);
return 0;
}
concat的回傳值不是它應該的值,好像不是保存str的值,正確的回傳應該是“hellolo”,但是回傳的是“hello”
uj5u.com熱心網友回復:
函式回傳的指標 text->str 無效,因為它是指向函式內宣告的本地陣列 str 的指標,退出函式后將不存在
char str[txt->length];
//...
txt->str=str;
return txt;
也有邏輯上的矛盾。指標 txt->str 和 txt1->str 指向字串
txt->str="hello";
txt1->str="lo"
但是指標 txt->str 并不指向字串,因為函式內的陣列 str 沒有構建字串。
您不必使用本地陣列 str 來動態分配一個將由 txt->str 指向的陣列。例如
txt->str = malloc( text->length 1 );
注意這樣的 typedef 宣告
typedef struct _Text {
char *str; //pointer to string
int length; //length of the text
int counter; //counter of text pointing this struct
} *Text;
只會讓代碼的讀者感到困惑,因為在這樣的宣告中
Text concat(Text txt1, Text txt2){
不清楚該名稱Text表示指標型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338861.html
上一篇:從scanf結果讀取到無限回圈
