我有一个"赋值从指针生成整数而没有强制转换"题。我以为我正确地投了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会起作用。
你能告诉我什么作业会产生一个整数以及如何解决这个问题吗?
答案 0 :(得分:1)
您应该分配一个字符,而不是字符串:
toP[i] = ' ';
因为作业右侧的" "
是一个包含两个字符(' '
和'\0'
)的数组,即您实际上正在尝试分配{{1}指向char *
数组toP
的元素的指针。