我读过有关数组和指针差异的文章,但我仍然不确定如果我想使用 scanf/fgets 是否会产生影响。
假设我有 2 个读取单词的函数。
void read1() {
char *text;
text = malloc(sizeof(char) * 50);
fgets(text, 50, stdin);
}
void read2() {
char text[50];
fgets(text, 50, stdin);
}
这段代码有什么区别吗?
最佳答案
编写带有指针的函数所带来的便利很大程度上在于它们不关心内存位置,只要指针指向的内存满足函数的大小要求即可。
特别是,fgets
在两个调用之间没有区别:它只关心您传递给它的指针 ptr
对于写入 length
字符。
尽管与 fgets
没有区别,但您的代码可能非常关心指针在内存中的位置:例如,您的第一个代码片段必须 free(text)
以避免内存泄漏。相反,您的第二个代码片段不需要释放测试
。但是,即使函数的作用域结束,第一个函数中的文本仍然有效,并且如果适当更改函数的返回类型,则可以将其返回给调用者。第二个函数无法在不进行复制的情况下执行此操作,因为一旦到达函数末尾,text
就会超出范围。
关于c - fgets - 数组与指针之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41450012/