我已经3年没有使用C了,在很多事情上我都非常生锈。我知道这看起来很愚蠢,但目前无法从函数返回字符串。请假设:我不能string.h为此使用。这是我的代码:#include <ncurses.h>char * getStr(int length){ char word[length]; for (int i = 0; i < length; i++) { word[i] = getch(); } word[i] = '\0'; return word;}int main(){ char wordd[10]; initscr(); *wordd = getStr(10); printw("The string is:\n"); printw("%s\n",*wordd); getch(); endwin(); return 0;}我可以捕获字符串(使用我的getStr函数),但无法使其正确显示(我得到垃圾)。感谢帮助。
3 回答
慕村9548890
TA贡献1884条经验 获得超4个赞
要么在调用方的堆栈上分配字符串,然后将其传递给函数:
void getStr(char *wordd, int length) {
...
}
int main(void) {
char wordd[10 + 1];
getStr(wordd, sizeof(wordd) - 1);
...
}
或将字符串设为静态getStr:
char *getStr(void) {
static char wordd[10 + 1];
...
return wordd;
}
或在堆上分配字符串:
char *getStr(int length) {
char *wordd = malloc(length + 1);
...
return wordd;
}
牧羊人nacy
TA贡献1862条经验 获得超7个赞
您要在堆栈上分配字符串,然后返回指向它的指针。当函数返回时,所有堆栈分配都将变为无效;现在,指针指向堆栈上下次调用函数时可能会被覆盖的区域。
为了执行您要执行的操作,您需要执行以下一项操作:
使用
malloc
或类似方法在堆上分配内存,然后返回该指针。free
完成内存后,调用者将需要进行调用。在调用函数(将使用该字符串的函数)中在堆栈上分配该字符串,然后将指针传递给该函数以将该字符串放入其中。在对调用函数的整个调用过程中,其堆栈上的数据有效。仅当您返回该堆栈分配的空间后,其他空间才会使用它。
- 3 回答
- 0 关注
- 563 浏览
添加回答
举报
0/150
提交
取消