

下記でコンパイルエラーになる。

[code]

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main() {
        char *buf="<title>sample</title>";
        char work[256];
        char *p;
    
        char *out=work;
        char *in=buf;
    
        in=strstr(in,"<");
        while(strcmp((*p=(*out++ = *in++)),"sample") != 0);
        printf("%c",p);
    
        //while(strcmp((*out++=*in++),">") != 0);
        *out='\0';
        printf("%s\n",out);
        return 0;
    }
    
[/code]

下記のエラーが出る。

[code]

    01.c: In function 'main':
    01.c:14:2: warning: passing argument 1 of 'strcmp' makes pointer from integer without a cast [enabled by default]
      while(strcmp((*p=(*out++ = *in++)),"sample") != 0);
      ^
    In file included from 01.c:3:0:
    c:\mingw\include\string.h:43:37: note: expected 'const char *' but argument is of type 'char'
     _CRTIMP int __cdecl __MINGW_NOTHROW strcmp (const char*, const char*)  __MINGW_ATTRIB_PURE;
                                         ^
    
[/code]

済みません。間違いを指摘願います。  
尚、出来ればコードでの回答をお願いします。  
その方が理解が早いので。協力をお願いします。


CC BY-SA 3.0
2017-02-26T04:46:37.130
32949
2017-02-26T05:43:38.997
2017-02-26T04:51:23.650
3605
14909
question
c
C言語のポインターで詰まっている。


落ち着いて警告とエラーを読んでみてください．  
`strcmp`関数は第一引数に`char`ポインタ型を取りますが，`*p`は`char`型変数です．

また，次の行ですが

[code]

    printf("%c",p);
    
[/code]

`%c`はchar型変数を表示するためのものですが，`p`は`char`ポインタ型なので合っていません．ポインタの値を表示したいなら`%p`を，NULL終端文字列を表示したいなら`%s`を使いましょう．

`char`型と`char`ポインタ型を混同しているように見受けられます．両者の違いを確認してください．


CC BY-SA 3.0
2017-02-26T05:43:38.997
32952
2017-02-26T05:43:38.997
4548
32949
answer