簡體   English   中英

將字符串讀入char時出現分段錯誤*

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM