c - 为什么我的字符串没有打印正确的值?

标签 c

这是我打印字符串的代码

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,其中 ichar [31] )。这甚至不应该编译。

其次,如果您打算从 validatestring 返回一个字符串,则必须确保您不会从中返回指向本地缓冲区的指针。 i 是一个本地数组。无法从 validatestring 返回指向 i 的指针。

关于c - 为什么我的字符串没有打印正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13673129/

相关文章:

c - execvp 找不到程序时返回错误

c - 将随机值分配给 C 中的数组

c - lang使用的调用约定是什么?

c - 生成一个介于 -1 和 1 之间的随机 double

C - 将数组局部复制到全局 - 段错误

c - 对于以下 C 程序,execl 返回 -1,表示权限被拒绝错误

strtol 等规范中的混淆语言

c++ - 生成球体

c - 解释一下输出 - 我不明白 i 的值将如何改变

c - 我使用辛普森规则进行集成的实现有什么问题