2014-01-09 182 views
0

我有我的代碼下面的問題,雖然它編譯正確:值類型爲const char不能被用來初始化char類型的實體*

值類型爲const char不能被用來初始化一個實體的類型字符*

有人可以幫助我嗎?我可以運行這個奇怪的代碼,但是我不能用這個來創建一個makefile。這對我來說很奇怪。

int SpliString(struct dict_word *entry, const char *str) 
{ 
long word_length,j,k; 

int yearIndex; 
char *buffer; 
char *endOfYears; 
char *endOfYear; 
char *endOfDefinition; 
char *endOfWord = strstr(str, "_#_"); 

    //Sets the first num bytes of the block of memory pointed by ptr 
    //to the specified value (related as an unsigned char) 
memset(entry, 0, sizeof(struct dict_word)); 

    // If '_#_' is not found, it's NULL 
    if (endOfWord) 
{ 
    // Calculating word legth; 'str' points to start of word, 'endofWord' points to '_#_' that is just after word 
    word_length = endOfWord - str; 

    // Copying data into the word 
    strncpy(entry->words, str, word_length); 

    // 'endOfYears' points to '_#_,' but wee need to find follow '_#_' 
    // therefore there is added 3 in order to skip curremnt '_#_ 
    endOfYears = strstr(endOfWord+3, "_#_"); 

    if (endOfYears) 
    { 
     word_length = endOfYears - (endOfWord+3); 
     // Skips _#_ 
     buffer = endOfWord+3; 
     yearIndex = 0; 
     j = 0; 

     // Finds next year in the line, it stops if all 10 years is filled 
     // or end of years string is reached 
     while(yearIndex<10 && buffer+j<endOfYears) 
     { 
      // Stores year in the buffer, with converting 'stirng' to 'int' 
      entry->year[yearIndex] = atoi(buffer+j); 
      // check year for negative... 
      if (entry->year[yearIndex]<=0) 
       return 0; 

      // Locating substring; 'j' is current offset from beginning of buffer 
      endOfYear = strchr(buffer+j, '_'); 

      if (endOfYear) 
      { 
       j = endOfYear - buffer; 
       j++; 
       yearIndex++; 
      } 
      else 
      { 
       break; 
      } 
     } 

     //endOfYears points to '_#_' that separatates 'years' and 'definition' 
     //and there is needed to find '_#_' between 'definition' and 'synonyms' 
     //therefore it skips '_#_' that separatates 'years' and 'definition', 
     //+3, because '_#_' has length = 3 
     endOfDefinition = strstr(endOfYears+3, "_#_"); 
     if (endOfDefinition) 
     { 
      word_length = endOfDefinition - (endOfYears+3); 
      k = 0; 

      for(j=0; j<word_length; j++) 
      { 
       // Skips '_#_' 
       if (endOfYears[j+3]==',') 
       { 
        entry->eng_synonyms[k] = ' '; 
        k++; 
       } 
       else if (endOfYears[j+3]>='a' && endOfYears[j+3]<='z') 
       { 
        entry->eng_synonyms[k] = endOfYears[j+3]; 
        k++; 
       } 
       else if (endOfYears[j+3]!='_') 
       { 
        return 0; 
       } 
      } 

      k = 0; 
      word_length = (str+strlen(str)) - (endOfDefinition+3); 

      for(j=0; j<word_length; j++) 
      { 
       if (endOfDefinition[j+3]==',') 
       { 
        entry->heb_synonyms[k] = ' '; 
        k++; 
       } 
       else if (endOfDefinition[j+3]>='A' && endOfDefinition[j+3]<='Z') 
       { 
        entry->heb_synonyms[k] = endOfDefinition[j+3]; 
        k++; 
       } 
       else if (endOfDefinition[j+3]!='_') 
       { 
        return 0; 
       } 
      } 
     } 

     // Check for legality 
     // Check all symbols of 'entry->words' 
     // calculate length and supress warning 
     for(j=0;j<(int)strlen(entry->words);j++) 
     { 
      if (entry->words[j]<'a' || entry->words[j]>'z') 
       return 0; 
     } 

     return 1; 
    } 
} 
return 0; 
} 
+0

'結構dict_word'會是不錯的發佈。 – chux

+0

錯誤究竟是什麼?你說它編譯正確,但然後列出看起來像編譯器錯誤。哪一行是錯誤的? – DoxyLover

+0

你是什麼意思,你可以運行代碼,但不能創建一個生成文件?這裏缺少重要的信息。 – nmichaels

回答

相關問題