2012-01-29 44 views
3

ここでは、文字列をcで分割し、charポインタで指し示された最初の整数値を返したいコードを示します。atoiからcharへのポインタを使用した整数

#include<stdio.h> 
void main(){ 
    int month[12]={0}; 
    char buf[]="1853 was the year"; 
     char *ptr; 
     ptr = strtok(buf," "); 
     printf("%s\n",ptr); 
     int value = atoi(*ptr); 
     printf("%s",value); 
} 

EDIT:セグメント化エラーが発生します。

問題は1853年を印刷していますが、これを整数形式に変換したいのですが、ポインタを使用してその値を整数として取得できますか?

printf("%s",value); 

あなたがやるべき

printf("%d",value); 

編集:

+0

注:strtonumはatoi/atolの安全で堅牢なバージョンです – Finslicer

+0

注: 'main()'は 'int'を返し、'(void) 'または'(int、char **) 'を取ります。 – unwind

答えて

4
あなたがここに文字列として整数を使用しようとしている

はい、ともint値= ATOI(PTR)を行います。別の答えで追加されました。

mainもintでなければなりません。無効ではありません。

また、どのコンパイラを使用していますか?

ptrbla.C:5:11: error: ‘::main’ must return ‘int’ 
ptrbla.C: In function ‘int main()’: 
ptrbla.C:11:30: error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive] 
/usr/include/stdlib.h:148:12: error: initializing argument 1 of ‘int atoi(const char*)’ [-fpermissive] 
ptrbla.C:12:26: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘int’ [-Wformat] 

を、私はあなたがほとんどのコンパイラからこれらの少なくとも一部を得ることができると思うだろう:(追加した後、一部が含まれる)あなたのコードをコンパイルしようとすると、GCC 4.6で、私はこれらのエラーと警告を得ました。

2
int value = atoi(ptr); 

逆参照する必要が、atoi()const char*、ないchar期待しています。

printf("%d",value); 

そして、あなたは%d%iを使用して整数を印刷します。 %sは文字列専用です。

int value = atoi(ptr); 

atoiptrが何であるかである文字ポインタを取得する必要があります


ところで、多分あなたはstrtol代わり

char buf[]="1853 was the year"; 
char* next; 
long year = strtol(buf, &next, 10); 

printf("'%ld' ~ '%s'\n", year, next); 
// 'year' is 1853 
// 'next' is " was the year" 
+0

私の8秒後、しかし完全な答え。 – ugoren

0

使用して使用したいと思います。 *ptrがこの場合の最初の文字-1です。とにかくポインタではないので、atoiでは使用できません。

関連する問題