-1
void main(int argc, char * argv[])
{ 
  FILE* inFile = NULL;
  char * bufferFromStdin;
  char buf[100];
  printf("Enter something:\n");
  scanf("%s", buf);
  printf("First scan from stdin is: %s\n", buf);

  if(buf == "THIS" || buf[0]=='T')
   {
    printf("THIS found first\n");
   }
   else {printf("Not Found first\n");}


   printf("Enter something again:\n");
   scanf("%s", bufferFromStdin);
   printf("Second scan from stdin is: %s\n", bufferFromStdin);
   if(bufferFromStdin == "THIS")
   {
    printf("THIS found second\n");
   }
   else {printf("Not Found second\n");}
}//main

给我输出:
./test < testinput.txt
输入一些东西:
第一次从标准输入扫描是: 第一次
找到
这个 再次输入:
第二次从标准输入扫描是:(null)
第二个没有找到

testinput.txt 有一行文本“THIS”


这 就是我在 运行 程序 时 得到 的
结果






使用任何一种输入法时,为什么输入无法保存到 char* 中,我将如何解决这个问题?我需要通过键盘从标准输入获取输入并重定向 I/O。我认为这与 malloc();

谢谢您的帮助。

4

2 回答 2

2

您的代码中有两个严重错误。首先,bufferFromStdin不指向分配的内存。scanf需要一个指向先前分配的内存的指针(例如buf在您的示例中),它将存储结果。当您传递未初始化的变量时,例如bufferFromStdin结果未定义。

其次,==C 中的运算符比较两个指针,而不是它们指向的内容。因此,buf == "THIS"永远不会是真的,因为buf它没有指向一个常量数组。为了比较两个字符串,使用strcmp. 当然,这两个指针都需要指向某个东西才能工作。

另外,作为旁注,main应始终返回intnot void

纠正这两个问题后,您的代码应该可以工作:

int main(int argc, char * argv[])
{ 
  char buf[100];
  printf("Enter something:\n");
  scanf("%s", buf);
  printf("First scan from stdin is: %s\n", buf);

  if(strcmp(buf, "THIS") == 0) {
    printf("THIS found first\n");
  } else {printf("Not Found first\n");}

  return 0;
}
于 2012-09-23T06:33:19.303 回答
0

您的代码中有几个编程错误。

void main(int argc, char * argv[])
{ 
  FILE* inFile = NULL;
  char * bufferFromStdin;
  char buf[100];

您正在使用三种不同的样式分配三个指针变量:

  • inFile已正确初始化(NULL 指针)。
  • bufferFromStdin未初始化。
  • buf被初始化并指向一个静态分配的区域。

您可能想检查在 C 中如何分配内存。

  printf("Enter something:\n");
  scanf("%s", buf);

这个scanf电话有点危险。如果用户插入的字符串长度超过 99 个字符(记住 \0 终止符),它将溢出缓冲区。你可能想检查这个问题

  printf("First scan from stdin is: %s\n", buf);

  if(buf == "THIS" || buf[0]=='T')

我很抱歉地说,但我觉得这很有趣!您想测试字符串相等性(内容,而不是指针)并且您看到第一个测试不起作用(您正在比较指针),因此您添加了第二个测试。检查手册页

   {
    printf("THIS found first\n");
   }
   else {printf("Not Found first\n");}

我也觉得这有点难看。您可能想坚持一种缩进样式

   printf("Enter something again:\n");
   scanf("%s", bufferFromStdin);

您正在使用未初始化的指针。这里发生的情况取决于您的编程环境、操作系统、编译器。一个强大的操作系统可能会终止你的程序。或者你正在破坏一些内存区域。

   printf("Second scan from stdin is: %s\n", bufferFromStdin);
   if(bufferFromStdin == "THIS")

与上述相同的问题,但您忘记实施解决方法。

   {
    printf("THIS found second\n");
   }
   else {printf("Not Found second\n");}
}//main
于 2012-09-23T06:38:16.950 回答