2014-10-16 55 views
0

我有一个“赋值使指针没有投射指针”的问题。我以为我正确铸造了malloc,但它似乎仍然给我一个警告。警告:赋值使得指针中的整数没有投射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

你只需要使用''''而不是''“'。而你的问题与'malloc'无关(但不管怎样,你不应该投射'malloc'的结果)。 – 2014-10-16 20:35:45

+0

可能重复[单引号与双引号在C](http://stackoverflow.com/questions/3683602/single-quotes-vs-double-quotes-in-c) – 2014-10-16 20:39:17

回答

1

您应该指定一个字符,而不是字符串:

toP[i] = ' '; 

在分配的右手边你" "在两个字符(' ''\0')的阵列,即你实际上是试图指定一个char *指针指向toP数组的元素char

+0

啊非常感谢你, 除了事实上,我是seg断裂和其他问题,目前的一个已经解决了! (可以编译好) 再次谢谢! – YummyTree 2014-10-16 20:47:52

+0

我看到很多地方可以/将会出现段错误,并且至少有一个地方可能会永久挂在循环中,但请继续前进并自行修复所有员工。 'printf'和你的调试器在这里是你的朋友。 – afenster 2014-10-16 20:56:36

相关问题