Segfault用单词小写功能

时间:2013-02-12 18:36:45

标签: c segmentation-fault

我有一个函数,如果需要,它会尝试将单词中的所有字母都设为小写。我调试了我的程序,发现我从这个函数中得到了我的段错误。 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很新,所以非常感谢详细解释:)

3 个答案:

答案 0 :(得分:2)

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

罗。 tolower()会返回int(您可以指定给char)。

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

答案 1 :(得分:2)

您正试图在char中投放char*,这是两件不同的事情。第一个是值(字符),第二个是指针(指向存储器中存储字符的位置的变量)。如果要返回完全处理的字符串,则应首先分配大小为strlen(word)的char数组,然后通过调用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中“指针”和“数组”背后的概念,以及分配和释放内存的过程。通过你使用它们的方式,你似乎对这些不满意。

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

答案 2 :(得分:1)

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

void word_to_lower(char * word) {
  int i, len = strlen(word);
  for (i = 0; i < len ; ++i) {
      word[i] = tolower(word[i]);
  }
}