这是我打印字符串的代码
char accname[MAX][MAXSTRING], transname[MAX][MAXSTRING];
printf ("Enter title for new account: ");
accname[i][i] = validatestring();
printf ("\n");
printf ("Enter title for transaction: ");
transname[i][i] = validatestring();
printf ("\n");
printf ("%s %s", accname[i], transname[i]);
我的 validatestring() 代码
char validatestring() {
int keeptrying = 1, rc;
char i[31];
do
{
rc = scanf("%30[^\n]", &i);
if (rc == 0)
{
printf (" **Invalid input try again: ");
clear();
}
else if (getchar() != '\n')
{
printf (" **Title is longer than 30 characters: ");
clear();
}
else
{
keeptrying = 0;
}
} while (keeptrying == 1);
return i;
}
在 accname[i]/transname[i] 的 printf 阶段,我没有得到我输入的值,我得到了奇怪的转换字符串类型,有时我得到了输入的第一个字符,但现在我得到了完全不同的东西。谁能找出原因吗?
最佳答案
您的 validatestring
函数已被破坏。
首先,您将 validatestring
声明为返回 char
。然而,您也尝试从中返回一个 char *
(请参阅 return i
,其中 i
是 char [31]
)。这甚至不应该编译。
其次,如果您打算从 validatestring
返回一个字符串,则必须确保您不会从中返回指向本地缓冲区的指针。 i
是一个本地数组。无法从 validatestring
返回指向 i
的指针。
关于c - 为什么我的字符串没有打印正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13673129/