【问题标题】:Converting a const char * to a lowercase char *将 const char * 转换为小写 char *
【发布时间】:2021-11-09 04:53:46
【问题描述】:

我对 C 语言很陌生,我有这个函数,它应该接受一个单词并以小写形式输出。这是我迄今为止尝试过的:

char *lowercase(const char *word) {
    int length = strlen(word);
    char *lower = malloc(sizeof(word));
    lower[length] = '\0';
    for(int i=0; i < length; i++) {
        lower[i] = tolower(word[i]);
    }
    return lower;
}

这会为我输入的每个单词输出 ▒▒▒▒▒*。

【问题讨论】:

  • malloc(length+1)
  • 您需要多一个字节来存储 NULL 字符。
  • 另外length 应该是size_t
  • @Someone_who_likes_SE 不,这还不够。 sizeof 完全错误,因此仅添加一个不会有帮助。
  • 您需要使用malloc(length + 1)。您不能为此使用sizeof,因为您最终会得到单个指针的大小而不是字符数。您还应该将size_t 用于length,而不是int

标签: c char


【解决方案1】:

malloc(sizeof(word)) 不正确,因为sizeof(word) 与提供单个指针大小的sizeof(char *) 相同。您需要为包含 NUL 终止符的字符串分配足够的空间。所以应该是malloc(length+1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多