【问题标题】:I can't understand professor's code about malloc我无法理解教授关于 malloc 的代码
【发布时间】:2020-02-15 04:06:29
【问题描述】:

教授给我一个关于malloc,动态内存分配的作业... 所以他给了我一些关于代码的提示,但我无法理解他的代码和提示。 我认为我的代码需要另一个'def'或'for循环'...... 无论如何。

问题 现在我可以用指针获取一些字符串。但我无法建造。 像外星语言一样打印... 这一页的最后,我希望这段代码能正常工作。 对于 (j=0;j

我和朋友尝试了一些代码。他也想不通。。 教授告诉我这段代码是给初学者的,“很容易解决”

#include<stdio.h>
#include<stdlib.h>

void main() {
    char* parray[3];
    int i, j;
    char str[70]; // temporary save place
    for (i = 0; i< 3; i++) {        //
        printf("sentence, please. : ");
        gets_s(str, sizeof(str));   //dynamic memory allocate
        parray[i] = (char*)malloc(sizeof(char)**str);
        printf("\n");


free(parray[i]);

我希望这段代码能正常工作。

for (j=0;j<3;j++)
    printf("your sentence is %s ", *parray[i])

【问题讨论】:

    标签: c string malloc dynamic-memory-allocation


    【解决方案1】:

    您应该分配输入字符串中的字符数量,为空终止符 +1。

    parray[i] = malloc(strlen(str)+1);

    然后将临时str中的数据复制到新的内存位置。

    同时避免使用gets_s 并改用fgets。 C11 的边界检查接口一般支持很差,但这个特殊功能只是使用过时的gets 重写旧代码时的一些占位符。

    【讨论】:

    • 谢谢!我会再试一次!而且,如果你有时间,你能告诉我如何保存另一个内存位置吗?只是 parray[i] = another location[j] 可以吗?
    • 我也不喜欢_s 函数,但是如果你告诉某人使用fgets,你还必须教他们如何去除换行符。 (对你和他们来说都是不幸的滋扰。)
    • @SteveSummit 不仅仅是我,C11 附件 K 明确建议我们不要使用该功能。至于 fgets 教程,请随时为这个社区 wiki 常见问题做出贡献:stackoverflow.com/questions/35178520/…
    • 感谢您的链接。不过,这些天我看到越来越多的提问者使用_s 函数,所以有人正在接受他们... :-(
    • @SteveSummit Microsoft 宣传这些_s 功能已有20 年了。一个问题是它们不能 100% 兼容 C11 附件 K“边界检查接口”(这是一场惨败)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2021-11-26
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    相关资源
    最近更新 更多