-3

如果需要,我有一个函数可以尝试将单词中的所有字母变为小写。我调试了我的程序,发现我从这个函数中得到了我的段错误。word 和 lowerword 都是字符串。

这是电话:

lowerword = word_to_lower(word);

这是函数本身:

char * word_to_lower(char * word) {
  int i;
  char * lowerword;
  for (i = 0; i < strlen(word); ++i) {
    lowerword = (char *) tolower(word[i]);
    printf("%s\n", lowerword);
  }

  return lowerword;
}

我对 C 非常陌生,因此将不胜感激详细的解释:)

4

3 回答 3

2
lowerword = (char *) tolower(word[i]);
printf("%s\n", lowerword)

不。tolower()返回 an int(您可以分配给 a char)。

char lowerword;
lowerword = tolower(word[i]);
printf("%c\n", lowerword)
于 2013-02-12T18:39:34.510 回答
2

您正在尝试将 a 转换charchar*两个不同的事物。第一个是一个值(一个字符),第二个是一个指针(一个指向内存中存储字符的位置的变量)。如果你想返回一个完全处理过的字符串,你应该首先分配一个大小为 char 的数组strlen(word),然后通过调用将其元素(即每个字符)设置为适当的值toLower

最后,你应该有类似的东西

char * word_to_lower(const char * word) {
  int i;
  unsigned int length = strlen(word);
  char * lowerword = (char*) malloc(sizeof(char) * length);
  for (i = 0; i < length; ++i) {
    lowerword[i] = tolower(word[i]);
    printf("%c\n", lowerword[i]);
  }

  return lowerword;
}

确保您了解 C 中“指针”和“数组”背后的概念,以及分配和释放内存的过程。从您使用它们的方式来看,您似乎对这些感到不舒服。

编辑:如评论中所述,此函数应将 aconst char *作为参数。

于 2013-02-12T18:50:44.910 回答
1

如果要降低整个字符串的大小写:

void word_to_lower(char * word) {
  int i, len = strlen(word);
  for (i = 0; i < len ; ++i) {
      word[i] = tolower(word[i]);
  }
}
于 2013-02-12T18:46:20.100 回答