警告:赋值在没有强制转换malloc的情况下从指针生成整数

时间:2014-10-16 20:32:05

标签: c

我有一个"赋值从指针生成整数而没有强制转换"题。我以为我正确地投了malloc,但它似乎仍然给了我一个警告。

我最近开始使用C并开始深入研究指针和mallocs。

程序假设提示输入整数(字符串的长度) 然后再次询问提示文本前面有多少个空格) 提示输入文字)

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

#define         MAX_LINE        256

int     enterIntegerInRange     (int min, int max)
{
    char line[MAX_LINE];
    do{
       printf("Please enter an integer between 0-255: ");
       fgets(line,MAX_LINE,stdin);
      }
    while ((0 < min) || (255>max));
    }


void    enterText       (char*  text, int    length)
{
    printf("Please Enter some text: ");
    fgets(text,length,stdin);
}


char*   createField     (int fieldWidth, int numTabs,const char* text)
{
    int lengthText = strlen(text);
    char* toP = (char*)malloc(fieldWidth + 1);
    int i;
    for (i = 0; i < numTabs; i++){
        toP[i] = " ";}
    int j;
    for (j = 0; j < lengthText; j++){
        toP[numTabs + j] = text[j];}
    toP[i]='\0';
    return(toP);
}

int     main            ()
{
    char  text[MAX_LINE];
    int   fieldWidth;
    int   numTabs;
    char* fieldPtr;

   while  (1)
   {
      fieldWidth  = enterIntegerInRange(0,MAX_LINE-1);

      if  (fieldWidth == 0)
        break;

      numTabs     = enterIntegerInRange(1,fieldWidth-1);
      enterText(text,MAX_LINE);

      fieldPtr    = createField(fieldWidth,numTabs,text);

      printf("\"%s\"\n",fieldPtr);
      free(fieldPtr);
    }

    return(EXIT_SUCCESS);
  }

问题特别出在createField函数中:

toP[i] = " ";

我认为考虑null会起作用。

你能告诉我什么作业会产生一个整数以及如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您应该分配一个字符,而不是字符串:

toP[i] = ' ';

因为作业右侧的" "是一个包含两个字符(' ''\0')的数组,即您实际上正在尝试分配{{1}指向char *数组toP的元素的指针。