前提・実現したいこと
文字列の交換
文字列の交換には、
1、文字列を指すポインタの交換による実現方法
2、配列を交換する関数を使った(1文字ずつ交換)実現方法
3、配列を一端他の配列に保存して交換する実現方法
があり、それぞれ以下の特徴があることがわかりました。
1、コードが簡単
2、少ないメモリで実現できる
3、配列の容量が大きいときメモリを大量に占有してしまう
今回、3の方法での実現を目的にプログラムしてみました。
発生している問題・エラーメッセージ
配列を一端他の配列に保存して交換しようとする際、main関数における文字列の宣言をポインタによる文字列で宣言するとエラーとなる。
配列による文字列で宣言するとうまくいく。
該当のソースコード
/char s1,s2をポインタによる文字列で宣言するとエラーになるのはなぜなのか/
/char s1,s2を配列による文字列で宣言するとうまくいく/
#include <stdio.h>
void swap_str(char s1[], char s2[]) /*もしくは、char *s1,char s2を仮引数にする/
{
char temp[128];
int i;
for (i = 0; (temp[i] = s1[i]) != '\0'; i++) { /*もしくは、temp[i]=*(s1+i)!='\0' */ ; } for (i = 0; (s1[i] = s2[i]) != '\0'; i++) { ; } for (i = 0; (s2[i] = temp[i]) != '\0'; i++) { ; }
}
int main(void)
{
char *s1 = "ABC";
char *s2 = "DEF";
printf("文字列s1は\"%s\"です。\n", s1); printf("文字列s2は\"%s\"です。\n", s2); swap_str(s1, s2); puts("文字列s1とs2を交換しました。"); printf("文字列s1は\"%s\"です。\n", s1); printf("文字列s2は\"%s\"です。\n", s2); return 0;
}
試したこと
main関数で、char s1[128]="ABC"; char s2[128]="DEF"と宣言するとうまくいった。
補足情報(FW/ツールのバージョンなど)
コンパイラは、visual studio 2017です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/16 09:04