得到一个奇怪的输出,所以我有一个方法,将字符串从文件移动到c中的字符数组,但是当我尝试打印出来时,我得到奇怪的输出在终端,看起来像一堆每个字符点,每个盒子都有4个0和1个。c程序正在编译和运行,但我在终端
这里是我的代码:
int main(int argc, char** argv){
if(argc != 3){
printf("not valid # of arguments");
return 1;
}
struct stat info;
int status;
status = stat(argv[2], &info);
if(status != 0){
printf("Error, errno = %d\n", errno);
return 1;
}
//command line argument is file
if(S_ISREG (info.st_mode)){
printf("%s is a file \n", argv[2]);
char *string1;
string1 = getFileString(argv[2]);
printf("string in file is %s \n", string1);
free(string1);
return 0;
}
if(S_ISDIR(info.st_mode)){
printf("%s is a directory \n", argv[2]);
openDirRec(argv[2]);
//what to do if command line argument is directory
}
return 0;
}
char* getFileString(char *fileName){
FILE* qp;
qp = fopen(fileName, "r");
char ch;
struct stat st;
if(stat(fileName, &st) != 0) {
return NULL;
}
/*int sizeCheck = 0;
while((ch=fgetc(qp))!=EOF){
sizeCheck++;
}
*/
int sizeCheck = st.st_size;
if(sizeCheck == 0){
return NULL;
}
else{
//fseek(qp, SEEK_SET, 0);
char *fileString;
fileString = (char*)malloc(sizeof(char) * sizeCheck + 1);
memset(fileString, 0, sizeCheck + 1);
//rewind(qp);
int count = 0;
while((ch=fgetc(qp)!=EOF)){
fileString[count] = ch;
count++;
}
printf("%s\n", fileString);
fileString[sizeCheck] = '\0';
fclose(qp);
return fileString;
}
}
'sizeof(char)'被定义为'1';没有意义乘以它。另外,* always *检查'malloc'的结果是否为'NULL'。另外,'stat'已经告诉你文件的大小;你的'sizeCheck ++'循环是非常低效和不必要的。另外,看看'fread';为每个角色调用'fgetc'也是低效的。另外,您可能希望'NUL'-在打印之前终止您的字符串*。另外,你是否确定你的文件只有ASCII字符?另外,现在学习如何使用调试器的时间已经不错了。 – 2014-10-17 03:29:01
这可以导致一个关闭,fileString [sizeCheck + 1] ='\ 0'; ? – 2014-10-17 03:42:08
@JonathonReinhart是的我使用gdb,当我修改我的代码之前检查gdb的第一个循环计数与实际阅读的字符,我摆脱了这一点,并使用stat结构,并得到了这样的大小,但所有的字符将字符放在数组中的循环显示为'\ 001'并且它仍然输出相同的东西 – atg963 2014-10-17 03:43:33