3 回答

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;
}

TA贡献1862条经验 获得超7个赞
您要在堆栈上分配字符串,然后返回指向它的指针。当函数返回时,所有堆栈分配都将变为无效;现在,指针指向堆栈上下次调用函数时可能会被覆盖的区域。
为了执行您要执行的操作,您需要执行以下一项操作:
使用
malloc
或类似方法在堆上分配内存,然后返回该指针。free
完成内存后,调用者将需要进行调用。在调用函数(将使用该字符串的函数)中在堆栈上分配该字符串,然后将指针传递给该函数以将该字符串放入其中。在对调用函数的整个调用过程中,其堆栈上的数据有效。仅当您返回该堆栈分配的空间后,其他空间才会使用它。
- 3 回答
- 0 关注
- 571 浏览
添加回答
举报