为什么我的字符串打印不正确值?

时间:2012-12-02 19:51:12

标签: 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;
}

在printf阶段为accname [i] / transname [i]我没有得到我输入的值,我得到奇怪的转换字符串类型,有时我得到了我的输入的第一个字符但现在我得到了完全不同的东西。任何人都可以找出原因吗?

2 个答案:

答案 0 :(得分:2)

您的validatestring功能可能会被破坏。

首先,您将validatestring声明为返回char。然而,您尝试从其中返回char *(请参阅return i,其中ichar [31])。这甚至不应该编译。

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

答案 1 :(得分:1)

是的,因为您正在尝试将所有内容存储在一个字符中。

array[i][i]

这是您尝试将所有内容存储在其中的字符位置

我认为你打算做的是

*array[i]  // It is a pointer to that location which you referring to.

这会将你的字符串存储在array [i]中,你可以使用

来访问你的字符
 array[i][i]

我希望这能解决你的问题。你的函数也应该返回一个char指针char *。

这应该这样做:

   *accname[i] = validatestring();

同时将函数的返回类型更改为char *