未選択 / 2008/10/02 (Thu) / 編集 |
今日は先輩と一緒にはまりました、Cの文字列処理orz
char s[5],t[5];
for(i=0,i<20,i++){
sprintf(&s[i],"%x",'a');
sprintf(&t[i],"%x",'a');
}
printf("%s",s); //aaaaaaaaaa printf("%s",t); //aaaaa
あれれ?おかしいよねこれ?
メモリ的にsとtが隣接してるんだろうな、でもってsとtの区切りがわからないんだろう、それぐらいわかれよ配列で文字数指定してるんだから、、、どうすりゃいいのかと思いきや
char s[6],t[6];
for(i=0,i<20,i++){
sprintf(&s[i],"%x",'a');
sprintf(&t[i],"%x",'a');
}
s[6]='¥0';//EOFを入れる t[6]='¥0';//EOFを入れる printf("%s",s); //aaaaa printf("%s",t); //aaaaa
らしい、、、strncpyやstrncatを使ってもEOFが入らないらしい、これだけのことに何時間もつぶした、、、きづかんてこんなんwww
char s[5],t[5];
for(i=0,i<20,i++){
sprintf(&s[i],"%x",'a');
sprintf(&t[i],"%x",'a');
}
printf("%s",s); //aaaaaaaaaa printf("%s",t); //aaaaa
あれれ?おかしいよねこれ?
メモリ的にsとtが隣接してるんだろうな、でもってsとtの区切りがわからないんだろう、それぐらいわかれよ配列で文字数指定してるんだから、、、どうすりゃいいのかと思いきや
char s[6],t[6];
for(i=0,i<20,i++){
sprintf(&s[i],"%x",'a');
sprintf(&t[i],"%x",'a');
}
s[6]='¥0';//EOFを入れる t[6]='¥0';//EOFを入れる printf("%s",s); //aaaaa printf("%s",t); //aaaaa
らしい、、、strncpyやstrncatを使ってもEOFが入らないらしい、これだけのことに何時間もつぶした、、、きづかんてこんなんwww
PR
トラックバック
URL :
コメント
Re:お尻のNullは基本ですよ
>strcatではNullが付加されるってGoogleが言ってたよ?
だが実際に入っていなかったのだからしかたない、、、なんだろね?-Wall -O2までしたのに、、、
>ていうか定義した配列の外側にアクセスできるんか… おそろしい。。。
すごかたよ、構造体だったんだが定義の順番がね
int x;
char a[10];
char b[10];
の順だとaをprintfしたときにbの分まで出るんだよ、だが以下のようにしたら大丈夫なんだ
char a[10];
int x;
char b[10];
printfって引数は文字列の先頭ポインタだけじゃん?終端文字列がないと連続しているcharを全部出力しちゃうみたいでさ、ちなみにこの構造体のメモリ上での配置が連続してたりするとbを出力したときに次のaまで出力してた(笑)
だが実際に入っていなかったのだからしかたない、、、なんだろね?-Wall -O2までしたのに、、、
>ていうか定義した配列の外側にアクセスできるんか… おそろしい。。。
すごかたよ、構造体だったんだが定義の順番がね
int x;
char a[10];
char b[10];
の順だとaをprintfしたときにbの分まで出るんだよ、だが以下のようにしたら大丈夫なんだ
char a[10];
int x;
char b[10];
printfって引数は文字列の先頭ポインタだけじゃん?終端文字列がないと連続しているcharを全部出力しちゃうみたいでさ、ちなみにこの構造体のメモリ上での配置が連続してたりするとbを出力したときに次のaまで出力してた(笑)