我寫了下面的c代碼。帶數組的c函數不返回值
#include <stdio.h>
#include <stdlib.h>
char *read_from_file()
{
FILE *ptr_file;
char buf[22];
char buf_old[sizeof(buf)];
char candata_needed[4];
ptr_file =fopen("/home/pi/probe.txt","r");
if (!ptr_file){
fclose(ptr_file);
return 1;
}
if (fgets(buf,sizeof(buf), ptr_file)!=NULL){
if(memcmp(buf, buf_old, sizeof(buf)))
{
memcpy(candata_needed, buf + 17, sizeof(buf));
memcpy(buf_old, buf, sizeof(buf));
}
}
fclose(ptr_file);
return (candata_needed);
}
int main()
{
char *candata;
int i;
while(1){
printf("stape 1\n");
candata=read_from_file()
for(i=0; i<4; i++)
{
candata[i] = *(candata + i);
}
printf("candata: %s\n", candata);
}
free(candata);
return 0;
}
函數應讀取文件並將內容(內容爲22十六進制數)存儲在數組中。從22十六進制數字,我只需要4,所以我存儲在陣列(candata_needed)4個十六進制數字。 所以我想從主函數的函數中獲取存儲的4個十六進制數字的指針。我嘗試了malloc
,但我多次成爲錯誤double free or corruption (fasttop)
。指針沒有出現。 任何人都可以幫忙嗎?
'if(!ptr_file)fclose(ptr_file);'沒有意義。如果文件沒有打開,則不需要關閉它。事實上,你在這種情況下調用'fclose(0)';那當然不能做任何有用的事情! –
有趣的是你*應該*使用malloc或類似的機制,並且你標記[tag:malloc],但你*不使用它! –
注意:'return'不是一個函數,而是一個聲明。不要把括號放在一個簡單的參數上,這可能會導致錯別字的錯誤。 – Olaf