2013-06-04 2 views
0

, когда я жестко код chemin в open(chemin, O_RDONLY) в имя файла, программа работает, но когда я ухожу, если open(chemin, O_RDONLY) Я получаю No such file or directory.C: Нет такого файла или каталога

Почему не chemin в type_fichier б/у?

Когда я использую printf("%s", chemin) в type_fichier я '

int type_fichier(char * chemin) { 
    int fp; 
    if ((fp = open(chemin, O_RDONLY)) == -1) { perror(""); exit(0); } 

    struct stat fileStat; 
    if(fstat(fp, &fileStat) < 0) 
    return 1; 

    switch(fileStat.st_mode & S_IFMT) { 
    case S_IFBLK: printf("block device\n");   break; 
    case S_IFCHR: printf("character device\n");  break; 
    case S_IFDIR: printf("directory\n");    break; 
    case S_IFIFO: printf("FIFO/pipe\n");    break; 
    case S_IFLNK: printf("symlink\n");     break; 
    case S_IFREG: printf("regular file\n");   break; 
    case S_IFSOCK: printf("socket\n");     break; 
    default:  printf("unknown?\n");    break; 
    } 
} 

int main(int argc, char *argv[]) { 
    char fn = "file"; 
    type_fichier(&fn); 
} 
+2

ли вы слушать предупреждения вашего компилятора на всех? Что-то о инициализации * делает целое число из указателя без приведения * должно дать вам мощный ключ. – Jens

+0

Ваш код даже не подлежит компиляции с помощью любого педанта C. И это именно то, что вы должны делать с любым компилятором C: запускайте его в наиболее педантичном режиме. – AnT

ответ

6

Ваша ошибка здесь, вы распределяя только 1 символ для fn:

char fn = "file"; 
type_fichier(&fn); 

Вы, вероятно, хотите:

const char *fn = "file"; 
type_fichier(fn); 
2

Вы используете char переменная для хранения строкового литерала вместо массива символов или эквивалентного.

int main(int argc, char *argv[]) { 
    char fn[] = "file"; 
    type_fichier(fn); 
} 

там вы идете ....