c - fgets - 数组与指针之间的区别

标签 c arrays pointers

我读过有关数组和指针差异的文章,但我仍然不确定如果我想使用 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/

相关文章:

c - 错误: expected statement before ‘)’ token in C macro

为字符串分配空间然后将字符插入该空间的正确方法?

c - 如何编写可以将调用者的名称附加到 C 中的日志输出的日志记录函数或宏

c - 无法将标准输出置于宽字符模式

javascript - 插入新元素时如何为 JavaScript 对象生成动态 id?

arrays - 如何使用 sectionIndexTitles 的不同数组填充索引 UITableView 的部分

c++ - 将 QString 转换为 QString 的指针

php - 如何从 PHP 扩展返回 C++ 对象数组

c - 函数中的读取和指向结构的指针

c - 删除C中链表中的头或唯一节点