得到一個奇怪的輸出,所以我有一個方法,將字符串從文件移動到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