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