gpt4 book ai didi

c - 在 C 中向后返回一个字符串

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:23 25 4
gpt4 key购买 nike

在这段代码中,我想扫描一个单词并将其向后返回。我尝试使用不同的方法,但我似乎没有成功。

这就是我现在剩下的。

#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 末尾的垃圾。这里的下一个错误是没有终止您的字符串。

我会这样修复它(并用增加的索引重写你的循环,否则很容易犯一次错误):

char * stringBackwards(const char *a) {

int sz = strlen(a);
char *palindrom = malloc(sz+1); // size + 1 for nul-termination char
int k;
for ( k = 0; k < sz; k++) {
palindrom[k] = a[sz-k-1];
}
palindrom[k] = '\0'; // don't forget to nul-terminate
return palindrom;

aside:存储返回值以便在需要时能够释放它。将它直接传递给 printf 是内存泄漏。

关于c - 在 C 中向后返回一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47490461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com