【问题标题】:C program. Taking string input to char pointer problemC 程序。将字符串输入到 char 指针问题
【发布时间】:2020-04-22 23:30:28
【问题描述】:

您好,我的 C 代码有问题。我试图让用户将字符串分配给先前定义的char *srchstr;和char *repstr;。通过查看其他类似的线程,我尝试通过以下方式实现它,但仍然失败:

char *srchstr;
srchstr = malloc(256);
char *repstr;
repstr = malloc(256);
printf("what are you searching for?:");
scanf("%255s",&srchstr);
fflush(stdin);
printf("\n what do you want to replace it with?:");
scanf("%255s",&repstr);

程序背后的整个想法是让用户能够选择他想用什么替换什么文本(整个代码在代码中定义srchstrrepstr 工作得很好,但我无法实现用户输入) 这就是它最初的样子:

char *srchstr = "400,300";
char *repstr = "400,300: (000,000,000) #000000";

我该如何解决它,以便用户可以输入 srchstrrepstr

【问题讨论】:

  • scanf 调用中去掉&scanf("%s",...) 想要一个 char *,它是 srchstr,但 &srchstrchar **。所以...scanf("%255s",srchstr);
  • fflush(stdin) 是未定义的行为,即不要那样做。代替scanf,使用fgets 读取一行输入,并使用strcspnremove the newline that fgets puts in the buffer

标签: c pointers char buffer


【解决方案1】:

scanf("%255s",&srchstr);->scanf("%255s", srchstr);

scanf("%255s",&repstr);->scanf("%255s",repstr);

& 运算符意味着您传递给定内存空间的地址,实际上是一个指针,指向存储输入的内存空间,由变量名标识,这很好,因为scanf 正是期望.

但是由于srchstrrepstr 已经是指针,因此您实际上传递的是指针的地址(指向指针的指针)而不是要存储的内存空间的地址(指向内存空间的指针)输入。

旁注:

fflush(stdin)

Invokes undefined behaviour,它应该与stdout一起使用。

您可以将其替换为:

int c;
while((c = fgetc(stdin)) != '\n' && c != EOF) {}

【讨论】:

  • @PatrykPiwowarczyk,很高兴我能提供帮助,如果您认为它正确解决了您的问题,请不要忘记 accept the answer
猜你喜欢
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 2011-09-03
  • 1970-01-01
  • 2010-12-12
相关资源
最近更新 更多