- 締切済み
プログラミング教えてください
プログラミングの問題分かりません教えてください! mcut.c, mpaste.cを参考にしてmcut.cによって 書き込かれたデータの小文字を全て大文字に変換後、共有メモリに 再度書き込むプログラムを作成してください。関数toupper()を使用する。 mcut.c #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *head; char in_data[4096], *in_ptr; char *pos; int i, in_tmp, shmid; key_t shmkey; shmkey=ftok("mcut",'a'); shmid=shmget(shmkey,sizeof(in_data),IPC_CREAT|0666); head=pos=shmat(shmid,0,0); in_ptr=in_data; for (i=0; i<sizeof(in_data)-1; i++) { if ((in_tmp=getchar())==EOF) { break; } *in_ptr=in_tmp; in_ptr++; } *in_ptr=(char)NULL; in_ptr=in_data; strncpy(pos,in_ptr,sizeof(in_data)); shmdt(head); return EXIT_SUCCESS; } mpaste.c #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *head; char out_data[4096], *out_ptr; char *pos; int shmid; key_t shmkey; shmkey=ftok("mcut",'a'); shmid=shmget(shmkey,sizeof(out_data),IPC_CREAT|0666); head=pos=shmat(shmid,0,0); out_ptr=out_data; strncpy(out_ptr,pos,sizeof(out_data)); printf("%s",out_data); fflush(stdout); return EXIT_SUCCESS; }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- heburusu
- ベストアンサー率85% (140/164)
mcut.cの以下の部分で、 配列のサイズ分 or EOFを受け取るまでキーボードから入力(getchar)を受け取っていますよね。 受け取った入力(文字)はin_tmpに格納され、共有メモリを指すポインタに格納しています(*in_ptr=in_tmp)。 >for (i=0; i<sizeof(in_data)-1; i++) { >if ((in_tmp=getchar())==EOF) { >break; >} >*in_ptr=in_tmp; >in_ptr++; >} 問題文を正しく理解できておらず間違っているかもしれませんが、 そこの代入する前にtoupper関数で文字(in_tmp)を大文字に変換してから、 共有メモリを指すポインタ(*in_ptr)に代入すればよいのではないでしょうか?