C言語文字列処理

##アドレス渡し######################################################################################
■int型の変数
void swap(int x, int y){
}
int a,b;
swap(&a, &b); /* &を付ける */


■int型の配列(配列で受け取る)
void setArray(int a[]){
}
int x[];
setArray(x); /* &を付けない */
setArray(&x[0]);


■int型の配列(ポインタで受け取る)
void setArray(int *a){
}
int x[];
setArray(x); /* &を付けない */
setArray(&x[0]);


■文字列(配列で受け取る)
void length(int s[]){
}
int str[100];
length(str); /* &を付けない */


■文字列(ポインタで受け取る)
void length(int *s){
}
int str[100];
length(str); /* &を付けない */


■構造体メンバ
void check(int x, char *str){
}

struct {
 int seq;
 char name[20];
} member;

member m[100];
check(&m[0].seq, m[0].name); /* 文字列なら、&は不要 */


■構造体全体
void check(member *mem){
 printf("%d\n", (*mem).seq);
 printf("%d\n", mem->seq);
}

struct {
 int seq;
 char name[20];
} member;

member m;
check(&m); /* &を付ける */




##ポインタによる文字列##############################################################################
■配列による文字列
char str[] = "abc";

  • 変更する場合は、strcpyを使用する
 strcpy(str, "cde");

  • 一文字だけの書き換えが可能
 str[1] = 'Z';


■ポインタによる文字列
char *str = "abc";

  • 変更する場合は、直接代入する
 str = "cde";

  • 一文字だけの書き換えは不可能



##strcatの使用について##############################################################################
■配列による文字列では、使用可能
char s[20] = "Today is ";
strcat(s, "Sunday");


■ポインタによる文字列では、使用不可能
char *s = "Today is ";
strcat(s, "Sunday"); /* sが指している文字列の後ろの領域を上書きしてしまう */



##ポインタによる文字列を交換する#####################################################################
void swap(char **str1, char **str2){
 char *tmp = *str1;
 *str1 = *str2;
 *str2 = *tmp;
}
char *s1 = "abc"; /* 先頭アドレスは、&s1 */
char *s2 = "cde"; /* 先頭アドレスは、&s2 */
swap(&s1, &s2);



##文字列の配列######################################################################################
■文字列が配列で実装される場合
char s[][10] = {"abc", "def", "ghi"};
printf(s[i]); /* 表示する */


■文字列が配列で実装される場合の関数への受け渡し
void change(char str[][10]){
}
char s[][10] = {"abc", "def", "ghi"};
change(s);


■文字列がポインタで実装される場合
char *s[] = {"abc", "def", "ghi"};
printf(s[i]); /* 表示する */


■文字列がポインタで実装される場合の関数への受け渡し
void change(char *str[]){
}
char *s[] = {"abc", "def", "ghi"};
change(s);
2006年08月02日(水) 02:10:15 Modified by alivealive




スマートフォン版で見る

×

この広告は60日間更新がないwikiに表示されております。