'strcpy': 識別子が見つかりません

このQ&Aのポイント
  • Visual C++ 2005で'strcpy'関数が見つからないエラーが発生してしまいます
  • コンパイルエラーの原因は、'strcpy'関数の定義が見つからないことです
  • エラーメッセージを解決するためには、'strcpy'関数を適切に定義する必要があります
回答を見る
  • ベストアンサー

'strcpy': 識別子が見つかりません

またもやわからないことが・・・ Visual C++ 2005で以下は(一部なんですが)をコンパイルすると、 #include<stdio.h> #include<stdlib.h> FILE *fp; struct meibo{ char name[12]; double tokutenA[6]; double tokutenB[6]; }; void main(int argc,char *argv[]) { char fname[20]; printf("ファイル名\n"); scanf("%s",fname); strcpy(fname,argv[1]); void input(FILE *fp,struct meibo* a,int* end); struct meibo a[5]; FILE *fp; int ban,end; if((fp=fopen("d:\\test\\fname","w"))==NULL){ printf("開けません\n"); exit(1); } visual studio 2005\projects\meibo\meibo1.cpp(18) : error C3861: 'strcpy': 識別子が見つかりませんでした となります、どう言うことでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★ヘッダをインクルードしていませんよ。 ・『#include <string.h>』を記述してコンパイルしてみて下さい。 ・以上。

nichirei
質問者

お礼

どうもありがとうございました。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

C++としてコンパイルしているのではないですか。 Cならヘッダは不要です(string.hをインクルードした方がよいのは確かです)。

nichirei
質問者

お礼

C++でコンパイルするとそんなのがいるんですね、ありがとうございました。

関連するQ&A

  • 'strcpy': 識別子が見つかりません

    初心者でまたもやわからないことが・・・ Visual C++ 2005で以下は(一部なんですが)をコンパイルすると、 #include<stdio.h> #include<stdlib.h> FILE *fp; struct meibo{ char name[12]; double tokutenA[6]; double tokutenB[6]; }; void main(int argc,char *argv[]) { char fname[20]; printf("ファイル名\n"); scanf("%s",fname); strcpy(fname,argv[1]); void input(FILE *fp,struct meibo* a,int* end); struct meibo a[5]; FILE *fp; int ban,end; if((fp=fopen("d:\\test\\fname","w"))==NULL){ printf("開けません\n"); exit(1); } visual studio 2005\projects\meibo\meibo1.cpp(18) : error C3861: 'strcpy': 識別子が見つかりませんでした となります、どう言うことでしょうか。 よろしくお願いします。

  • fatal error LNK1120: 外部参照 1 が未解決です

    またわからないことが・・・ 教えて下さい。 以下をVC++2005でコンパイルすると、 MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。 C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と警告がでて通りません。 何のことでしょうか。 #include<stdio.h> #include<process.h> struct meibo{   char name[20];   char tel[20];   char address[20]; }; void message( void ); void input( FILE *fp, int cnt , struct meibo *a, int *end ); void main( void ) {   struct meibo a[20];   FILE *fp;   int cnt, end;   if( (fp=fopen( "meibo.dat", "w" ) ) == NULL ){     printf( "Can not open the meibo.dat.\n" );     exit( 1 );   }   message();   fprintf( fp, "番号, 名前, TEL, 住所\n" );   fflush( fp );   cnt = 0;   end = 0;   while( end == 0 ){     input( fp, cnt, &a[cnt], &end );     cnt++;     fflush( fp );     if( cnt == 20 ){       printf( "人数が一杯です.終了します.\n" );       end = 1;     }   }   fclose( fp ); } void message( void ) {   printf( "名前, TEL, 住所, endを入力してください.\n" );   printf( "継続の時はend=0," );   printf( "中止の時は,end=1と入力してください.\n" ); } void input( FILE *fp, int cnt, struct meibo *a, int *end ) {   printf( "名前-->" );   scanf( "%s", a->name );   printf( "TEL -->" );   scanf( "%s", a->tel );   printf( "住所-->" );   scanf( "%s", a->address );   printf( "Exit? Continue:0 Exit:1 -->" );   scanf( "%d", end );   printf( "\n" );   fprintf( fp, "%2d, %s, %s, %s\n",     cnt+1, a->name, a->tel, a->address ); }

  • テキストファイルの内容を2次元配列に格納したい

    課題で用意されたテキストファイルを読み込み、空白を区切りとする文字列の単位で配列に格納したいのですが、やりかたがわかりません。 ソースプログラムですが #include<stdio.h> #include<string.h> #include<ctype.h> #define MAX 1000 int TextSplit(char *fname, char (*SpStr)[50]); int main(void) { int i, n; char fname[MAX], SpStr[MAX][50]; int Split; FILE *fp; printf("input File =>"); scanf("%s", fname); Split = TextSplit(fname, SpStr); printf("\n %d[文字列数] \n", Split); return 0; } int TextSplit(char *fname, char (*SpStr)[50]) { int i, j, k; char Readstr[MAX]; FILE *fp; fp = fopen(fname, "r"); if(fp == NULL) { printf("ファイルオープン失敗"); return 1; } i = 0; while(fscanf(fp, "%s", SpStr) != EOF) { i++; } fclose(fp); return i; } 以上のソースプログラムですが、内容は「空白で区切る文字列の単位の総数を表示する」ものになっています。 今日の20時までに終わらせないといけないので、ご教授お願いします。 使ってるソフトはMicrosoft Visual Studioです。

  • fopenの書き出しでファイル作成できません。

    Microsoft Visual C++ 2010を使ってC言語の勉強をしております。 大変初歩的な内容で申し訳ないのですが、 fopenで操作モードを「書き出し」としたときにファイルが存在しない場合、新たにファイルが作成されるという認識で正しいでしょうか。 しかし、実際にプログラムを作成するとエラーが発生してしまうので、困っております。 もし役立つのであれば、ソースをご覧ください。 ――――――――――――― #include <stdio.h> #include <stdlib.h> int main(void) { int i; double x, y; char fname[20]; FILE *fp; printf("input filename : "); scanf_s("%s", fname); fp = fopen(fname, "w"); … ――――――――――――― 自分の間違いをご指摘いただけるとありがたいです。 どうかよろしくお願いいたします。

  • fpus:ファイル操作

    Cを勉強している初心者です。 このソースはコンパイルは通るのですが、 エラーがでてしまいます。 いろいろと調べてみたりもしたのですが わかりませんでした。 なぜなのでしょうか? #include <stdio.h> #include <string.h> struct student{ char name[20]; }; int main(void) { struct student s[1]; int i; int j = 1; FILE *fp; strcpy(s[0].name,"taro"); strcpy(s[1].name,"jiro"); if((fp = fopen("test.txt","w+")) == NULL) { printf("ファイルを開けませんでした\n"); return (-1); } for(i=0;i<=j;i++) { fputs(s[i].name,fp); } fclose(fp); return (0); }

  • fputs:ファイル操作

    Cを勉強している初心者です。 このソースはコンパイルは通るのですが、 エラーがでてしまいます。 いろいろと調べてみたりもしたのですが わかりませんでした。 なぜなのでしょうか? #include <stdio.h> #include <string.h> struct student{ char name[20]; }; int main(void) { struct student s[1]; int i; int j = 1; FILE *fp; strcpy(s[0].name,"taro"); strcpy(s[1].name,"jiro"); if((fp = fopen("test.txt","w+")) == NULL) { printf("ファイルを開けませんでした\n"); return (-1); } for(i=0;i<=j;i++) { fputs(s[i].name,fp); } fclose(fp); return (0); }

  • ファイルから一文字ずつ読み込む

    ファイルを読み込むfgetc()関数のところでプログラムが停止します。 以下が実行したプログラムです。 #include<stdio.h> void get_name(char name[],int a){ printf("ファイル名を入力してください。\n"); scanf("%s",name); } void open(FILE *fp2,char name[]){ if((fp2=fopen(name,"r"))==NULL){ printf("ファイルオープンエラー"); } } int count(FILE *fp3){ int ch=0; int count=0; if(fp3==NULL){ printf("error"); } while((ch=fgetc(fp3))!=EOF){ if(ch=='\n'){ count++; } } printf("TEST"); fclose(fp3); return(count); } int main (void){ FILE *fp; char fname[30]; get_name(fname,30); open(fp,fname); printf("%d",count(fp)); return(0);} ファイル名を入力してください。ファイル名を入力、プログラム停止です。 '\n'を数えれるようにしてください。御指摘お願いします。

  • どうしてもわかりません2

    #include <stdio.h> #include <string.h> #define MAX_LINE_SIZE 1024 #define NN 1000000 main(int argc, char* argv[]) { char fname[256]; char buf[MAX_LINE_SIZE]; int i; FILE *fp; for(i=1; i<argc; i++) { bzero(fname, 256); strcpy(fname, argv[i]); if( !(fp = fopen(fname, "r"))) { printf("File Open Error.\n"); exit(1); } while( fgets(buf, MAX_LINE_SIZE, fp ) ) { printf("%s", buf); } fclose(fp); } } このプログラムをコンパイルして(実行形式はa.out)コマンドラインから 以下のようなデータのテキストファイルna.txtを実行しました。./a.out na.txtするとこのソースだとbufに一行目がすべて文字列として入ってしまうと思います。そうではなく、1行目の数字ひとつずつを取り出す方法が知りたいです。たしか数字とか空白とかを判定する関数があったともうのですが、どうしてもわかりません。 ちなみにこの問いかけからこの問いがきています。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1577294 1 2 3 4 5 6 2 3 4 5

  • strcpyのsegmentation fault

    118 char* argv[argc+1]; 120 121 for(i = 0; i < argc ; i++) 122 { 123 char tmp[BUF]; 124 while(buf[k]!=' ' & buf[k]!='\0') 125 { 126 tmp[j] = buf[k]; 127 j++; 128 k++; 129 } 130 tmp[j]='\0'; 131 j=0; 132 k++; 133 strcpy(argv[i],tmp); 134     //arg v[array]=tmp; 135 printf("temp = %s argv = %s\n",tmp,argv[array]); 136 } 137 argv[i+1]=tmp2; 133番の部分が問題です 最初に回る時にはprintfの結果が出ます temp = test argv = test でも2回目からはerrorになるます argv[1]は char*刑なのでstrcpyに何の問題もないと思いますが どんな問題でerrorがでるのでしょうか? これはlineを呼んで int main(int argc, char* argv[]) のargv部分をようにするためのcodeです errorの理由とか char* argv[]部分を簡単に作る方法を知りたいです お願いします

  • ファイル操作やポインタ、構造体について(C言語)

    C言語の課題で詰まってしまいました。宜しければ助言を宜しくお願いします。 コマンド選択で,0) 終了,1) 追加,2) 検索(id),3)変更 が行える学生成績管理プログラムを作成する。 データは,学生の番号 名前 GP 総単位数 形で学生のデータを持っているファイルである。 #include<stdio.h> #include<stdlib.h> #include<string.h> struct student{ int id; char name[25]; int gp; int credit; }; void add(char *, struct student);//追加 int search(char *, struct student *);//検索 void change(char *, struct student);//指定したidの学生の情報を変更 main(int argc,char *argv[]) { FILE *fp; int i = 0; int num; struct student students; if(argc == 1){ printf("set filename\n"); return 1; } while(1) { printf("1)add 2)search 0)quit "); scanf("%d",&num); if(num == 0) break; /* 追加 */ if(num == 1) { printf("id name gp credit ? "); scanf("%d %s %d %d", &students.id, students.name, &students.gp, &students.credit); add(argv[1], students); } /* 検索 */ if(num == 2) { printf("id ? "); scanf("%d", &students.id); if(search(argv[1],&students)){ printf("%d %s %d %d\n", students.id, students.name, students.gp, students.credit); } else{ printf("ID %d Not Found.\n",students.id); } } if(num == 3){ //変更 } } } /* 追加ルーチン */ void add(char *filename, struct student students) { FILE *fp; if((fp = fopen(filename, "a")) == NULL){ printf("can't open %s\n", filename); exit(1); } fprintf(fp,"%d %s %d %d\n", students.id, students.name, students.gp, students.credit); fclose(fp); } /* 検索ルーチン */ int search(char *filename, struct student *students) { FILE *fp; int id; char name[25]; int gp; int credit; if((fp = fopen(filename, "r")) == NULL){ printf("can't open %s\n", filename); exit(1); } while(fscanf(fp,"%d %s %d %d", &id, name, &gp, &credit) != EOF) { if(id == students->id){ students->id = id; strcpy(students->name ,name); students->gp = gp; students->credit = credit; return 1; } } return 0; fclose(fp); } /* 変更ルーチン */ void add(char *filename, struct student students){ } ------------ここまで------------ ファイルの操作での入出力は"a"や"r"、また"w"を利用するのかとも思いましたが、 指定したIDの内容を書き換えるにはポインタを2つ使う方法しか思いつかないのですが、与えられた問題で、変更のプロトタイプは void change(char *, struct student); となっていて、どうやるのかまったく見当もつきません。 稚拙な文で伝わりにくいかもしれませんが、 変更のやり方についてご教授願います。 見難くて申し訳ありません。 どうか宜しくお願いします。

専門家に質問してみよう