You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C程序执行printf后崩溃返回0xC0000005错误求助

解决程序0xC0000005访问违规错误的方案

你的程序返回0xC0000005错误是因为存在两处严重的内存访问问题,下面逐一说明并给出修复方案:

问题1:未初始化指针+错误的scanf用法

ibanPessoal和passwordPessoal是未初始化的char指针,没有指向任何有效内存区域;同时scanf("%s", &ibanPessoal);的写法完全错误——%s需要传入char*类型的参数,你传的是指针的地址(char**),输入时会直接破坏内存空间,触发访问违规。

问题2:修改只读字符串字面量

char* pastaDoUsuario = "nil";中,"nil"是存储在程序只读数据段的字符串字面量,不允许被修改。你用sprintf往里面写入新内容,直接触发了只读内存的写入保护错误。


修复后的完整代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h> // 包含Sleep和_access所需的头文件

// 定义输入内容的最大长度,防止缓冲区溢出
#define MAX_IBAN_LEN 30
#define MAX_PWD_LEN 20
#define MAX_FOLDER_PATH 50

const char* nomePastaContas = "contas";
// 用固定大小的字符数组替代未初始化的指针,确保有可用内存
char ibanPessoal[MAX_IBAN_LEN];
char passwordPessoal[MAX_PWD_LEN];

void loginMenu(){
    system("cls");

    printf("\n\n IBAN: ");
    // 限制输入长度,避免超出数组范围
    scanf("%29s", ibanPessoal);

    printf("\n\n Password: ");
    scanf("%19s", passwordPessoal);
    printf("Debug\n");
    verificarConta(ibanPessoal, passwordPessoal);
}

void verificarConta(char* iban, char* pswd){
    printf("Debug 2\n");
    // 用字符数组存储路径,替代只读的字符串字面量
    char pastaDoUsuario[MAX_FOLDER_PATH];
    strcpy(pastaDoUsuario, "nil");
    printf("Debug 3\n");
    
    printf("\n\n IBAN: %s\n PASSWORD: %s\n", iban, pswd);
    printf("Debug 4\n");
    
    printf("\n\n%s\n", pastaDoUsuario);
    sprintf(pastaDoUsuario, "contas/%s", iban);
    printf("\n\n Pasta de Usuario: %s\n", pastaDoUsuario);
    
    if(_access(pastaDoUsuario, 0) == 0){
        printf("Usuario encontrado\n");
    }
    else{
        printf("Usuario nao encontrado.\n");
    }
    Sleep(10000); // 缩短睡眠时间,方便测试
}

关键修复点说明

  • 把未初始化的指针替换为固定大小的字符数组,确保有足够内存存储输入内容,同时通过scanf的长度限制(如%29s)防止缓冲区溢出。
  • 将pastaDoUsuario改为可修改的字符数组,避免写入只读内存区域。
  • 给调试printf添加换行符,避免输出缓冲导致调试信息延迟显示,方便排查问题。

内容的提问来源于stack exchange,提问作者pinx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:52:41