2014-10-16 76 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

相關問題