前提
AOJのこの問題を解いています。
該当のソースコード・試したこと
問題を解こうと9b.c
を書いたのですがstrncpyでcardcpy1に代入するときにうまく動作しない(指定した文字数以上を代入してしまう)ので、何が問題があるのかを知るために9btest.c
を書いたのですが結局よくわかりませんでした。
9b.c
c
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4int main (){ 5 char card[201]; 6 char cardcpy1[201],cardcpy2[201]; 7 int m,h,i,j,substr,wordcount,lenght; 8 while(1){ 9 scanf("%s",card); 10 if(card[0] =='-')break; 11 scanf("%d",&m); 12 for(i = 0,lenght = strlen(card);i < m;i++){ 13 scanf("%d",&h);//hは対象文字数 14 substr = h;//substrには対象文字以外の先頭の 15 wordcount = lenght - h; 16 17 /*cardcpy1に対象文字を代入する*/ 18 strncpy(cardcpy1,&card[0],h); 19 printf("cardcpy1:%s\n");//デバッグ 20 /*cardcpy2に対象文字以外を代入する*/ 21 strncpy(cardcpy2,&card[substr],wordcount); 22 printf("cardcpy2:%s\n");//デバッグ 23 24 /*cardcpy2にシャッフルの結果を代入*/ 25 strcat(cardcpy2,cardcpy1); 26 printf("現在のシャッフル:%s\n",cardcpy2);//デバッグ 27 strcpy(card,cardcpy2); 28 } 29 printf("%s\n",card); 30 } 31return 0; 32} 33
input
1aabc 23 31 42 51
output
1aabc 23 31 4cardcpy1:aabc 5cardcpy2:abc 6現在のシャッフル:abcaa 72 8cardcpy1:abcaa 9cardcpy2:caa 10現在のシャッフル:ccaaa 111 12cardcpy1:ccaaa 13cardcpy2:caaa 14現在のシャッフル:caaac 15caaac
9btest.c
c
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4int main (){ 5 char card[201]; 6 char cardcpy1[201],cardcpy2[201]; 7 int m,h,i,j,substr,wordcount,lenght; 8 9 scanf("%s",card); 10 strncpy(cardcpy1,&card[0],1); 11 printf("cardcpy1:%s\n");//デバッグ 12 printf("%s\n",card); 13return 0; 14} 15
input
1aabc
output
1cardcpy1:aabc//本当はここでcardcpy1:aとなってほしい 2aabc
回答2件
あなたの回答
tips
プレビュー