[英]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.