[英]Segmentation fault upon reading in a string to a char *
我正在尝试编写自己认为简单的程序,但遇到了一些问题。 当我尝试将字符串读入char指针时,我遇到了段错误,但仅限于代码的某些部分。 我觉得这是我在字符串中读取方式的问题,但是除了段错误,我没有得到更多的信息。
这是我的代码:
#include <stdio.h>
#include <string.h>
int main() {
char *Q_or_U;
char *E_or_P;
int entry;
int rc;
while(1) {
printf("Would you like to query or update? (q/u): ");
rc = scanf("%s", Q_or_U);
if (rc != 1) break;
printf("received %s\n", Q_or_U);
if (strcmp(Q_or_U, "q") == 0 || strcmp(Q_or_U, "Q") == 0) {
//execution fine in this block
printf("Which entry would you like to query? ");
rc = scanf("%d", &entry);
if (rc != 1) break;
printf("received %d\n", entry);
}
else if (strcmp(Q_or_U,"u") == 0 || strcmp(Q_or_U, "U") == 0) {
//misbehaving
printf("Would you like to encrypt that message? (y/n): ");
rc = scanf("%s", E_or_P); //segmentation fault
if (rc != 1) break;
printf("received %s", E_or_P);
}
}
}
尝试将字符串读取到变量E_or_P中时,总是会发生段错误,我缺少什么? (我是C新手)。
您的两个变量都是指针,但是它们指向Universe中的随机字节。 不幸的是,当您写信给那个地方时,它会导致崩溃。
您需要使它们指向一些有效的内存以允许在其中写入。
一种方法是使用malloc( char *Q_or_U = malloc(30);
),另一种方法是使用内存声明它们( char Q_or_U[30];
左右)。
您声明的char指针只是未初始化的指针。 它们指向随机内存地址,您正在尝试写入这些地址。
您必须将它们声明为静态数组或动态分配内存。
char Q_or_U[SIZE];
要么
char *Q_or_U;
Q_or_U=(char*)malloc(SIZE*sizeof(char));
但是似乎您只想读取一个字符,因此在没有数组和指针的情况下就足够了:
char Q_or_U;
rc = scanf("%c", &Q_or_U);
注意“&”。 有关此的更多信息,请阅读有关c指针的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.