2012-05-11 117 views
0

我想轉換一些代碼,這意味着從命令行參數中除了「_」以外的所有非數字字符除外,而不是命令行參數I想獲得的代碼從一個普通字符串接受輸入,我試圖代碼接受字符串轉換,但我不斷收到此錯誤我怎樣才能得到isalnum()正確接受字符串

words.c:9: warning: assignment makes pointer from integer without a cast 

我很困惑,我在做什麼錯了,所以我非常感謝能夠解決這個問題的任何幫助,謝謝!

而且,這裏是接受命令行參數

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
int main(int argc, char ** argv) { 
    int i; 
    char *p; 
    if (argc > 1) { 
     for (p = argv[1]; *p != '\0'; p++) { 
      if (islower(*p) || isdigit(*p) || *p == '_') { 
       putchar (*p); 
      } 
     } 
     putchar ('\n'); 
    } 
    return 0; 
} 

,這裏的原代碼是我的「版本」

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
int main(void) { 
    int i; 
    char *p; 
    char stg[] = "hello"; 
    // if (argc > 1) { 
     for (p = stg[1]; *p != '\0'; p++) { 
      if (isalnum(*p) || *p == '_') { 
       putchar (*p); 
      } 
     } 
     putchar ('\n'); 
    return 0; 
} 

回答

3

在你的代碼p是一個指針。將p = stg[1];更改爲p = &stg[1];

+0

我認爲他真正打算做的只是p = stg –

+0

@VictorVasiliev可能是: - ?或者,也許跳過第一個元素是故意的? – cnicutar

+0

謝謝!我很驚訝地忽略了這一點,雖然希望這種類型的東西在未來會小得多,但我認爲這樣做會很好,也@VictorVasiliev感謝您指出了這一點,儘管stg本身並沒有工作,所以我只需stg [0] – lacrosse1991