C malloc不像我预期的那样工作

时间:2014-11-15 22:47:01

标签: c ubuntu malloc

我不知道这段代码有什么问题。

char *names;
int i = 6;
names = (char *) malloc((i+1)*sizeof(char));

printf("%d", strlen(names));

0是结果而不是7,但为什么?

//我学会了像这样使用malloc:tomb =(double *)malloc(n * sizeof(double));

2 个答案:

答案 0 :(得分:4)

逐行......

int len1 = 0;
int i = 6;

这些都应该是size_t

names = (char *) malloc((i+1)*sizeof(char));

您没有显示names的变量声明。我将假设它是char *,但将来确保显示所有变量的变量声明,甚至更好,提供完整的测试我们必须为自己编译和运行的程序。

在C中,不要转换malloc的返回值。在所有C系列语言中,不要写sizeof(char),根据定义它是

您需要检查malloc是否失败(返回NULL)。

while (names[len1] != '\0')

此行上的未定义行为,因为从malloc返回的内存未初始化。循环可以迭代任何数次,包括零,七,六,五,四,三,二,一,八,九,十,4096和无穷大。它也有权使程序崩溃,甚至让恶魔飞出你的鼻子。

    len1++;

此外,您已重新发明strlen

printf("%d", len1);

\n之后需要%d

答案 1 :(得分:0)

正如扎克所说,他说的对你有好处。请注意阅读strcpy和malloc,它们在我刚开始时总会给我带来麻烦。

这有效......

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

int
main(void)
{
    int len1 = 0;
    int i = 6;
    char *names = malloc(i + 1);

    strcpy(names, "hi");
    while (names[len1] != '\0')
        len1++;

    printf("%d\n", len1);
    return 0;
}