我想创建一个创建具有特定长度的新字符串的函数。 这是代码:
char* newString(int lenght){
char* newstring =(char*)((calloc(lenght, sizeof(char))));
newstring[lenght] = '\0';
return newstring;
}
我以这种方式使用它:
char* string = newString(10);
我的问题是,当我这样做时:
printf("String lenght %lu \n",strlen(string));
我得0但我不明白为什么。 我是C新人 感谢您的时间
答案 0 :(得分:4)
strlen
返回第一个'\0'
之前的字符数。如果您使用:
char s[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int len = strlen(s); // len will be zero.
答案 1 :(得分:1)
这里有几个问题。第一个是你在索引"长度"中使用空终止符来终止t(并且我不确定实际引用了什么),这将是一个大于数组。所以你在那里访问一些随机的内存blob。第二种是使用calloc不正确。我想你想要更像的东西:
char* new_string(int length) {
char* new_string;
new_string = malloc(sizeof(char) * length);
memset(new_string, 0, length);
new_string[length-1] = '\0';
return new_string;
}
示例中的Strlen返回0,因为它计算空终止符之前的字符,在实现中恰好为0。
答案 2 :(得分:0)
如果长度不包括空终止,那么你应该将t [length - 1]设置为零,或者将sizeoc长度设置为+。
答案 3 :(得分:0)
strlen计算c字符串中的字符数,直到它看到" \ 0" (字符串结束)所以你的字符串用" \ 0"初始化它的长度实际为0.将此值更改为另一个像。
memcpy(string, "good things", 10);
printf("%d", strlen(string));