【发布时间】:2018-05-09 11:35:59
【问题描述】:
在这段代码中,我想扫描一个单词并将其返回。我尝试使用不同的方法,但似乎没有成功。
这就是我现在剩下的。
#define WORD_LENGTH 256
char * stringBackwards(char *a) {
char *palindrom = malloc(WORD_LENGTH * sizeof(char));
int k = 0;
for ( int i = WORD_LENGTH; i >= 0; i--, k++) {
palindrom[k] = a[i];
}
return palindrom;
}
main() {
char word[WORD_LENGTH];
printf("Please enter a word \n");
scanf_s("%s", word, WORD_LENGTH);
printf("%s", stringBackwards(word));
return 0;
}
它总是在我的控制台中返回一些奇怪的符号。
我希望你们中的一些人可以帮助我纠正这个问题。
【问题讨论】:
-
您正在交换整个缓冲区,而不仅仅是字符串。所以你会在你的反向字符串的开头得到
word末尾的垃圾。 -
我已经想到了。但即使我将 WORD_LENGTH 设置为 4 并输入 4 个随机字母,我也会得到垃圾。
-
首先你需要记住
char字符串实际上被称为null-terminated字符串。需要处理那个空终止符。然后考虑用户输入的情况,例如一个两个字符的字符串?剩下的 253 个字符将被初始化为什么?提示:他们不会。 -
是的,因为字符串不是 nul 终止的:2 个问题
-
或许您需要了解
strlen功能?或获取a good beginners book or two,它将解释这一切。想想当你在调用printf中使用你的函数时,谁会调用free来获取你malloc的内存?