我不知道这段代码有什么问题。
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));
答案 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;
}