-1

这是我打印字符串的代码

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 阶段,我没有得到我输入的值,我得到了奇怪的转换字符串类型,有时我得到了输入的第一个字符,但现在我得到了完全不同的东西。谁能弄清楚为什么?

4

2 回答 2

2

你的validatestring功能被彻底破坏了。

首先,您声明validatestring为返回char。但是您也尝试char *从中返回 a (请参阅return i, where iis char [31])。这甚至不应该编译。

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

于 2012-12-02T20:00:15.750 回答
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*

于 2012-12-02T19:57:01.513 回答