赋值从整数中生成指针而不进行强制转换[默认启用]

时间:2014-04-09 04:16:49

标签: c pointers

我用Google搜索并看到了很多答案,但没有一个符合我的情况。这是我的主要():

char * cString;
puts("Please enter data you want to encrypt.");
cString = getInput(cString, &iStringSize);
printf("The message is: %s\n\n", cString);

char * strEncrypt;
strEncrypt = encrypt(cString, offset);
printf("The encrypted message is: %s\n\n", strEncrypt);

return 0;

该程序基本上读取任意输入,然后对其进行加密。这是getInput函数:

char * getInput(char *cString, int * iStringSize)
{
    puts("Begin reading input.");
    char buffer[CHUNK];
    int iBufferSize;
    while(fgets(buffer, CHUNK - 1, stdin) != NULL)
    {
        iBufferSize = strlen(buffer);
        *iStringSize += iBufferSize;
        cString = realloc(cString, sizeof(char) * (*iStringSize + 1));
        strcat(cString, buffer);
    }
    printf("String size is: %d\n", *iStringSize);
    puts("Reading successful");
    return cString;
}

如上所示,cString是char指针。 getInput函数也返回char指针。但是,我不断收到消息:赋值从整数中生成指针而不进行强制转换[默认情况下启用]

当我编译代码时会发生这种情况。

此功能也是如此

char * encrypt(char *str, int offset)
{
    puts("Begin encryption.");
    char * strEncrypt = malloc(sizeof(char) * (strlen(str) + 1));
    int i;
    for(i = 0; i < strlen(str); i++)
    {
        //substitution algorithm using int offset variable.
        //I accessed str and strEncrypt using pointer arithmetic
    }

    puts("Encryption success!");
    return strEncrypt;
}

请不要建议realloc的错误处理。

1 个答案:

答案 0 :(得分:1)

在第一次使用之前声明getInpyt和encrypt函数,否则编译器会假定这些函数返回int并接受可变数量的参数。

您可以使用以下3种方式中的任何一种来声明它们。

  1. 包含包含其声明的相应头文件。
  2. 在首次访问声明之前,在全局范围或本地范围内手动包含声明。
  3. 在首次访问这些函数之前移动它们的定义。