【发布时间】:2015-12-24 12:00:30
【问题描述】:
我来了
访问冲突读取位置0x00000000
当我尝试运行我的程序时。我可以完全没有错误地构建程序,但是当我尝试运行它时,它崩溃了。我在 StackOverflow 上读到,当指针不指向任何东西时,就会出现这个问题。我已经搜索了代码但没有任何成功。这里有谁可能知道问题出在哪里?
main.c
#include <stdio.h>
#include <stdlib.h>
#include "functions.h"
#define FILENAME 256
/*
*
*/
int main(int argc, char** argv) {
char * data = readFromFile("input.txt");
int arrLength = getArrayLength(data);
char * encryptedData = (char *)malloc(arrLength * sizeof(char) + 1 * sizeof(char));
decrypt(data, arrLength, 1, encryptedData);
encrypt(data, arrLength, 1, encryptedData);
int menu = 0;
int key;
printf("Enter 1 for decrypt or 2 for encrypt from input.txt");
scanf("%d", &menu);
if (menu == 1) {
printf("Enter key:");
scanf("%d", &key);
encrypt(data, arrLength, key, encryptedData);
}
else {
printf("Enter key:");
scanf("%d", &key);
decrypt(data, arrLength, key, encryptedData);
}
writeToFile("output.txt", encryptedData);
printf("\n Enter any key to exit 11: ");
getchar();
return (1);
}
functions.c
#include <stdio.h>
#include <stdlib.h>
#include "functions.h"
char * readFromFile(char * fileName) {
FILE *fp;
char c;
if ((fp = fopen(fileName, "r")) == NULL) {
puts("Error: input file invalid");
return NULL;
}
int count = 0;
while ((c = fgetc(fp) != EOF)) count++;
rewind(fp);
char *data = (char *)malloc(count * sizeof(char) + 1 * sizeof(char));
count = 0;
while (!feof(fp)) {
fscanf(fp, "%c", &data[count++]);
}
fclose(fp);
return data;
}
void writeToFile(char * fileName, char *data) {
FILE *fp;
if ((fp = fopen(fileName, "w")) == NULL) {
puts("Error: output file invalid");
}
else {
int i = 0;
while (data[i] != '\0') {
fputc(data[i], fp);
i++;
}
fclose(fp);
}
}
int encrypt(char *plainText, int arrLength, int key, char *cipherText) {
if (key > 25 || key < 1) {
puts("Error: invalid key");
return 0;
}
for (int i = 0; i < arrLength; i++) {
if ((plainText[i] >= 97 || plainText[i] <= 122) || (plainText[i] >= 65 || plainText[i] <= 90)) {
// only encrypt alpha characters
cipherText[i] = plainText[i] + key;
}
else {
cipherText[i] = plainText[i];
}
}
return 1;
}
int decrypt(char *plainText, int arrLength, int key, char *cipherText) {
if (key > 25 || key < 1) {
puts("Error: invalid key");
return 0;
}
for (int i = 0; i < arrLength; i++) {
if ((plainText[i] >= 97 || plainText[i] <= 122) || (plainText[i] >= 65 || plainText[i] <= 90)) {
// only decrypt alpha characters
cipherText[i] = plainText[i] - key;
}
else {
cipherText[i] = plainText[i];
}
}
return 1;
}
int getArrayLength(char *data) {
int i = 0;
while (data[i] != '\0') {
i++;
}
return i;
}
functions.h
#ifndef MY_FUNCTION
#define MY_FUNCTION
char * readFromFile(char * fileName);
void writeToFile(char * fileName, char *data);
int encrypt(char *plainText, int arrLength, int key, char *cipherText);
int decrypt(char *plainText, int arrLength, int key, char *cipherText);
int getArrayLength(char *data);
#endif
【问题讨论】:
-
你的程序比较长。你能试着缩小范围吗?
-
欢迎来到 Stack Overflow!请看Why is “while ( !feof (file) )” always wrong?
-
欢迎来到 Stack Overflow!请先阅读How to Ask页面。
标签: c access-violation