0

我不知道如何保存用户输入的字符串。

我想向用户询问两个单独的字符串变量(一个单词)并将它们存储起来以供以后用作referencequery变量。我想过使用scanf来获取用户输入和%s存储变量。

根据我修改代码的方式,我会得到分段错误或错误的输出。我究竟做错了什么?

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main(void)
{

  char *reference, *query;

  printf("\n Enter reference genome file name:  ");
  scanf("%s", reference);

  printf("\n Enter sequence query file name:  ");
  scanf("%s", query);

  printf("\n\n Reference file used was: %s\n", reference);
  printf("Query sequence file used was: %s\n", query);

  return 0;
}
4

2 回答 2

2

而不是char*你应该分配char[](字符数组)。

像这样声明你的字符串:

char reference[80];
char query[80];

这样,计算机就知道要为字符串节省多少空间。这就是为什么您之前遇到分段错误的原因,因为您有一个指向字符串开头的指针,但没有存储它的内存。

我将代码更改为:

#include <stdio.h>

int main() {
    char reference[80];
    char query[80];

    printf("\nEnter reference genome file name:  ");
    scanf("%s", reference);

    printf("\nEnter sequence query file name:  ");
    scanf("%s", query);

    printf("\nReference file used was: %s\n"
           "Query sequence file used was: %s\n", reference, query);

    return 0;
}

我编译gcc并运行了一个示例:

Enter reference genome file name:  file1.txt

Enter sequence query file name:  file2.txt

Reference file used was: file1.txt
Query sequence file used was: file2.txt
于 2013-09-28T04:22:39.270 回答
2

这里:

char *reference, *query;

您尚未为字符串分配任何存储空间。你可以这样做:

char reference[100], query[100];

这假设您事先知道最大输入大小,并且您需要采取额外的步骤来确保您不会溢出缓冲区,例如通过告诉 scanf 最大大小:

scanf("%99s", reference);

您可以检查返回值以查看用户是否输入过多,以便知道它是否被截断。

于 2013-09-28T04:23:12.187 回答