[問題]字串問題

看板C_and_CPP (C/C++)作者 (有緣人)時間15年前 (2010/12/03 10:52), 編輯推噓1(1021)
留言22則, 5人參與, 最新討論串1/1
#include <stdio.h> #include <stdlib.h> typedef struct SYS_MSG{ int len; char *st; }SYS_MSG; char string(int a,int b); char main(int argc, char *argv[]) { char *strin; int inta=2,intb=2; strin=string(inta,intb); printf("strin=%s\n",strin); system("PAUSE"); return 0; } char string(int a,int b) { SYS_MSG msbuf; char *str="abc"; msbuf.st=str; int sum; sum=a+b; printf("sum=%d\n",sum); return msbuf.st; } 請問我在string函式底下要回傳一個字串回去printf怎麼會有錯誤壓? 請大大幫個忙~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.164.192

12/03 11:05, , 1F
物件不見了吧
12/03 11:05, 1F

12/03 11:12, , 2F
char是1BYTE,char*是4BYTE,傳著傳著資料就消失了
12/03 11:12, 2F

12/03 11:13, , 3F
char *str="abc";的"abc"是放在堆疊嗎?
12/03 11:13, 3F

12/03 11:17, , 4F
放進MSBUF.ST
12/03 11:17, 4F

12/03 11:28, , 5F
原PO說說這段CODE是在做什麼的吧,很多我都想不通啊XD
12/03 11:28, 5F

12/03 11:40, , 6F
主要是要return一個字串回去可以print出來就可以
12/03 11:40, 6F

12/03 11:44, , 7F
我想到了改這裡char* string(int a,int b);謝謝你提醒我
12/03 11:44, 7F

12/03 11:49, , 8F
string()裡的msbuf改用malloc要記憶體
12/03 11:49, 8F

12/03 11:52, , 9F
要怎麼寫?請大大指引
12/03 11:52, 9F

12/03 11:58, , 10F
SYS_MSG * msbuf; msbuf = malloc(sizeof(SYS_MSG));
12/03 11:58, 10F

12/03 11:58, , 11F
後面msbuf.st都改為msbuf->st
12/03 11:58, 11F

12/03 11:59, , 12F
...啊 還有..你SYS_MSG裡的st還沒要記憶體..
12/03 11:59, 12F

12/03 12:01, , 13F
重點是這段是要幹麻吧,string裡宣告一個SYS_MSG然後只回
12/03 12:01, 13F

12/03 12:01, , 14F
回傳一個char* ..
12/03 12:01, 14F

12/03 12:59, , 15F
沒人發現他 main 回傳 char 嗎? XD
12/03 12:59, 15F

12/03 13:03, , 16F
string 的回傳型態改一下, 是 char*, char 太小, 沒
12/03 13:03, 16F

12/03 13:04, , 17F
辦法存記憶體位址, 多的部分會被切掉, 再轉成指標就不
12/03 13:04, 17F

12/03 13:04, , 18F
一樣了
12/03 13:04, 18F

12/03 13:09, , 19F
這CODE要吐糟的地方太多了..........
12/03 13:09, 19F

12/03 14:30, , 20F
補充:變數 char *str="abc"; 的生命期介於 string{} 內…
12/03 14:30, 20F

12/03 14:32, , 21F
出了 string 的 } ,變數 char *str 即消失。
12/03 14:32, 21F

12/03 14:34, , 22F
還有,用完 malloc 的記憶體後,記得 free 掉。
12/03 14:34, 22F
文章代碼(AID): #1C-5jiXZ (C_and_CPP)
文章代碼(AID): #1C-5jiXZ (C_and_CPP)