无法将返回的函数分配给主变量
Cannot assign returned function to main variable
代码如下。它编译时没有警告或错误,但终端上没有打印任何内容。有什么想法吗?
我想答案应该已经很明显了,我看不到。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* palindrome (char *word);
main()
{
char *leksi, *inverse_leksi;
//leksi means word
leksi = malloc(sizeof(char)*256);
inverse_leksi = malloc(sizeof(char)*256);
gets(leksi);
inverse_leksi = palindrome(leksi);
puts(inverse_leksi);
}
char* palindrome (char *word)
{
int i;
char *inverse_word;
inverse_word = malloc(sizeof(char)*256);
for (i = 0; i < strlen(word) + 1; i++)
{
inverse_word[i] = word[strlen(word) - i];
}
return inverse_word;
}
有效的 c 风格字符串中的字符在索引 0
到 strlen(var) - 1
中。索引 strlen(var)
中的字符是空终止符 ([=14=]
)。在循环中,您将此字符分配给 invers_word[0]
,因此您将返回一个空字符串。相反,您应该少迭代一个字符,然后显式处理空终止符字符串。此外,您在索引计算中有一个差一错误:
// iterate up to the length of the string, without the [=10=]
for (i = 0; i < strlen(word); i++)
{
inverse_word[i] = word[strlen(word) - i - 1];
}
inverse_word[strlen(word)] = '[=10=]'; // explicitly handle [=10=]
使用这个:inverse_word[i] = word[strlen(word) - i - 1];
。如果您没有 -1
,要复制的第一个字符将是 [=12=]
.
不要使用 gets
。有更好的选择。
代码如下。它编译时没有警告或错误,但终端上没有打印任何内容。有什么想法吗?
我想答案应该已经很明显了,我看不到。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* palindrome (char *word);
main()
{
char *leksi, *inverse_leksi;
//leksi means word
leksi = malloc(sizeof(char)*256);
inverse_leksi = malloc(sizeof(char)*256);
gets(leksi);
inverse_leksi = palindrome(leksi);
puts(inverse_leksi);
}
char* palindrome (char *word)
{
int i;
char *inverse_word;
inverse_word = malloc(sizeof(char)*256);
for (i = 0; i < strlen(word) + 1; i++)
{
inverse_word[i] = word[strlen(word) - i];
}
return inverse_word;
}
有效的 c 风格字符串中的字符在索引 0
到 strlen(var) - 1
中。索引 strlen(var)
中的字符是空终止符 ([=14=]
)。在循环中,您将此字符分配给 invers_word[0]
,因此您将返回一个空字符串。相反,您应该少迭代一个字符,然后显式处理空终止符字符串。此外,您在索引计算中有一个差一错误:
// iterate up to the length of the string, without the [=10=]
for (i = 0; i < strlen(word); i++)
{
inverse_word[i] = word[strlen(word) - i - 1];
}
inverse_word[strlen(word)] = '[=10=]'; // explicitly handle [=10=]
使用这个:inverse_word[i] = word[strlen(word) - i - 1];
。如果您没有 -1
,要复制的第一个字符将是 [=12=]
.
不要使用 gets
。有更好的选择。