gpt4 book ai didi

c - 在函数中使用 char **,我们可以为传递给她的 char * 分配内存

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:48 24 4
gpt4 key购买 nike

阅读:

以及与此问题相关的其他问题和万维网上的其他内容,所以请继续阅读...

很快,我想,我从来没有allocchar *这样的内存,但我认为它可能有效:

void _alloc(char *line)
*line = malloc(sizeof(char) * BUFSIZE);

忽略 _allocmain 中的错误处理程序。最主要的是 SEGFAULT 这样的部分:

 main()
{
char *text, *start;
_alloc(text);
start = text;
// add contents in text briefly
*text++ = 'd'; *text = '\0'; // SEGFAULT
fprintf(stdout, "%s", start);
}

我有一张 _alloc 函数的图片是这样工作的:

    main()
{
char *text;
/// function _alloc:
char *tmp = text;
*tmp = malloc ( sizeof(char) * BUFSIZE);
/// end
}

还有……当我尝试这个时,它给了我警告:赋值从没有转换和 SEGF 的指针生成整数。我的照片是:

tmp = text; // tmp point at address of line
*tmp = malloc(...); // tmp change to what point line...

而且我看到我需要 _alloc(char **) ,但不知道它是如何与 ** 一起工作的。我试着用 array[][] 来操作,我知道。但是无法获取图片,为什么它需要是char **?以下是部分答案:

Here, line is a local variable within _alloc . Pointers are passed by value in C, so a receives a copy of the pointer in main when you do _alloc(text); < answer user nos (modified with my name of variables) on Scope of malloc used in a function

附言我知道写这样的函数更简单 char *_alloc();

最佳答案

让我们举一个简单的例子,用一个整数。

假设我们有以下功能:

void foo(int n)
{
n = 3;
}

int main(void)
{
int number = 5;
foo(number);
}

我想你会同意 numberfoo(number) 之后没有被修改。这是因为 n 只是 number 的一个副本,它是一个局部变量,在 foo 退出后被销毁。

这就是我们使用指针的原因。但是指针是变量,两者是完全一样的东西。看这个例子:

void bar(int *n)
{
*n = 3;
int *temp = malloc(sizeof(int));
*temp = 6;
n = temp;
}

int main(void)
{
int number = 5;
int *number_p = &number;
bar(number_p);
}

这里,number = 3bar(number_p) 之后,因为我们将整数的地址传递给 bar。但是,地址本身是原始指针的副本。因此,指令 n = temp; 不会对 number_p 做任何事情,因为 n 只是一个局部变量。

这就是为什么我们需要使用指向指针的指针。

通过以下示例,您可以修改 foo 函数内部的原始指针:

void foo(int **n)
{
**n = 3;
int *temp = malloc(sizeof(int));
*temp = 6;
*n = temp;
}

int main(void)
{
int number = 5;
int *number_p = &number;
foo(&number_p); //We pass the adress of the pointer number_p
}

foo(&number_p)之后,number是3,number_p是指向temp的指针,因为我们能够在 foo 中修改地址本身。

在你的例子中,你需要修改_alloc函数中的指针,所以签名应该是

void _alloc(char **line)

指针应该修改为

*line = malloc(...);

此外,_alloc 应该这样调用

char* s;
_alloc(&s);

对不起,我的英语不好,为了清楚起见,我已经尽力了。

关于c - 在函数中使用 char **,我们可以为传递给她的 char * 分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28564847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com