繁体   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