字符串创建问题C.

时间:2015-05-20 22:32:49

标签: c string pointers

我想创建一个创建具有特定长度的新字符串的函数。 这是代码:

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新人 感谢您的时间

4 个答案:

答案 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));