初始化使得整数指针不带C语言强制转换警告

时间:2016-10-10 04:51:29

标签: c

const char * const str = ch;上有warning:initialization makes pointer from integer without a cast

如果我将其更改为const char * const str = (char*)ch,警告将为cast to pointer from integer of different size

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv){
    FILE *file1;
    char ch;
    char array[100];

    file1 = fopen("list.txt","r");
    while((ch=fgetc(file1))!=EOF)
        {
            const char * const str  = (char*)ch;
            const char * const delim = "\n";
            char * const dupstr = strdup(str);
            char *saveptr = NULL;
            char *substr = NULL;
            int count = 0;
            printf("original string is %s",dupstr);
            substr = strtok_r(dupstr, delim, &saveptr);
            do{
                printf("#%d filename is %s\n", count++, substr); 
                substr = strtok_r(NULL, delim, &saveptr);
            }
            while(substr);

        free (dupstr);
        return 0;
        }
    fclose(file1);
    return 0;
}

2 个答案:

答案 0 :(得分:2)

  • ch=fgetc(file1))!=EOF不正确,因为ch是char,但EOFint。这就是fgetc和类似函数返回int的原因。修复当前代码的最简单方法可能是使用临时int,然后将其复制到循环内的char

  • const char * const str = (char*)ch;。从角色到指针的转换没有任何意义。这就是警告的原因。如果要创建由一个字符组成的临时字符串,则应执行char str[2] = {ch, '\0'}之类的操作。这样你也不必使用strdup

答案 1 :(得分:1)

chchar(整数类型),您尝试将其转换为指针类型char *(可以存储地址的类型)。这两种类型的性质非常不同,标准禁止这样做。至少转换ch(char *)&ch

的地址

请注意,当您尝试将char用作C字符串时,这不会保存您的代码。这些都是不同的类型。 char只是让您存储角色代码值的东西。 C字符串是由NUL字符终止的序列字符。

建议(我们实际上并不知道您尝试实现的目标):使用一组字符,使用fgets从打开的文件中读取一整行等。