赋值从整数开始,默认情况下不启用强制转换

时间:2016-02-04 18:31:38

标签: c unix pointers design-patterns operating-system

编译此代码时:

void rep_and_print(char * str, char * patt, int l, int i)
{
    char * pch; // pointer to occurence
    char * s;
    s = str; // save original pointer
    if (i == 0)
    {
        while ( (pch = strstr(str,patt)) != NULL)
        {
            // FOUND
            memset (pch,'*',l); // Set asterisk
            str = pch + l; // move pointer to the end of asterisks to found new  occurences
        }
    }
    else
    {
        while ( (pch = strcasestr(str,patt)) != NULL)
        {
            // FOUND
            memset (pch,'*',l); // Set asterisk
            str = pch + l; // move pointer to the end of asterisks to found new occurences
        }
    }
    printf ("%s",s);
}

我收到了这个错误:

  

警告:赋值在没有强制转换的情况下从整数中生成指针   [默认启用]

while ( (pch = strcasestr(str,patt)) != NULL)

并且有一个箭头指向pchstrcasestr

之间的等号

2 个答案:

答案 0 :(得分:2)

从手册页:

   #define _GNU_SOURCE

   #include <string.h>

   char *strcasestr(const char *haystack, const char *needle);

您需要在#define _GNU_SOURCE(以及#include <string.h>之前)添加#include <stdio.h>,以便可以看到函数声明。

答案 1 :(得分:0)

while((pch = strcasestr(str,patt))!= NULL) strcasestr是一个非标准扩展,因此您必须在文件的第一行添加#define _GNU_SOURCE,或使用-D_GNU_SOURCE进行编译。