字符串,询问和存储

时间:2013-09-28 04:20:15

标签: c string

我无法弄清楚如何保存用户输入字符串。

我想让用户询问两个单独的字符串变量(一个单词)并存储它们以供以后用作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;
}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

下面:

char *reference, *query;

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

char reference[100], query[100];

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

scanf("%99s", reference);

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