指针出于某种原因显示为垃圾

时间:2019-01-31 15:01:55

标签: c

我的指针有问题。我有一个void函数,我想返回一些东西。确切地说是一个主题。因此,我使用一个指针。问题是,当我要求用户输入主题然后调用我的函数时,我的指针将垃圾与给定的主题一起返回。就像“一些奇怪的字符” ava,而不是Java。我怀疑我的通知功能中的scanf错误,但是我真的不知道为什么我的主题不正确。

void announc(char day1[10], char day2[10], char date1[5], char date2[5], int class1, int class2, char *subject);
int main()
{
    char day1[10], day2[10], date1[5], date2[5];
    char subject[10];
    int class1, class2;
    scanf("%s %s %s %s %d %d", day1, date1, day2, date2, &class1, &class2);
    announc(day1, day2, date1, date2, class1, class2, subject);
    printf("subject: %s\n", subject);
    return 0;
}
void announc(char day1[10], char day2[10], char date1[5], char date2[5], int class1, int class2, char *p)
{

    printf("something");
    *p = scanf("%s", p);

}

1 个答案:

答案 0 :(得分:3)

*p = scanf("%s", p);

不确定您打算做什么。 scanf返回已填充的参数数(即1)。然后,您将结果分配给p的第一个元素。打印后,您会看到终端尝试打印ASCII值1(紧随其后的字符串,不受影响)的字符。

根本不要那样做!您需要执行的操作(将字符串输入到p指向的对象中)无需触摸返回值即可完成:

scanf("%s", p);

每个scanf参数(格式字符串除外)实际上都是一个“ out argument”。它必须以这种方式工作,因为可能要读的东西(通常是!)不只一件事,但您只能从函数中返回一个值。