我的指针有问题。我有一个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);
}
答案 0 :(得分:3)
*p = scanf("%s", p);
不确定您打算做什么。 scanf
返回已填充的参数数(即1)。然后,您将结果分配给p
的第一个元素。打印后,您会看到终端尝试打印ASCII值1(紧随其后的字符串,不受影响)的字符。
根本不要那样做!您需要执行的操作(将字符串输入到p
指向的对象中)无需触摸返回值即可完成:
scanf("%s", p);
每个scanf
参数(格式字符串除外)实际上都是一个“ out argument”。它必须以这种方式工作,因为可能要读的东西(通常是!)不只一件事,但您只能从函数中返回一个值。