我无法弄清楚如何保存用户输入字符串。
我想让用户询问两个单独的字符串变量(一个单词)并存储它们以供以后用作reference
和query
变量。我想过使用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;
}
答案 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);
您可以检查返回值以查看用户输入的内容是否太多,以便您知道它是否被截断。