0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【C】初めてのC言語(20. 文字列を扱う標準関数)

Posted at

はじめに

  • これまでの学習に続いて、今回は文字列操作の関数について学んだ結果をまとめてみました。

学習環境

  • 今回はpaiza.ioのC言語のエディタを使いました。

strlen関数

  • 文字列の長さ(バイト数)を取得する関数です。
  • 文字列(配列)の先頭から\0までの長さが返されます。
  • strlen関数の戻り値はsize_t型ですが、ここではint型にキャストして受け取っています。
Main.c
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    const char str[100] = "Test";
    int length = (int)strlen(str);

    printf("文字列の長さ:%d\n", length);
    return 0;#include <stdio.h>

int main(int argc, char *argv[])
{
    char buff[256];
    gets(buff);  // 256バイトを超えても終端文字が現れないとバッファオーバーフローが発生する!
    
    printf("入力値:%s\n", buff);
    return 0;
}
}
実行結果
文字列の長さ:4

strcmp関数

  • 2つの文字列を比較するための関数です。
  • 引数で指定した2つの文字列が等しければ0が返されます。
    • 戻り値が0であるかをチェックすれば、文字列が同一であるかをチェックできます。
  • memcmp関数と似ていますが、memcmp関数はバイト数を指定して比較するのに対して、strcmp関数は「\0が出現するまでの範囲」を比較します。
Main.c
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char str1[10] = "Test";
    char str2[10] = "Test2";
    
    str2[4] = '\0';  // 「2」を終端文字に置き換える
    
    if (strcmp(str1,str2)==0) {
        printf("「%s」と「%s」は同じです。", str1, str2);
    } else {
        printf("「%s」と「%s」は異なります。",str1, str2);
    }
    return 0;
}
実行結果
「Test」と「Test」は同じです。

strcpy関数

  • 文字列をまるごとコピーする関数です。
  • コピー先には、十分なメモリ領域が割り当てられていることが前提となります。
Main.c
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char* src = "Test";
    char dest[100];
    
    strcpy(dest, src);
    
    printf("destは「%s」です。", dest);
    return 0;
}
実行結果
destは「Test」です。

strcat関数

  • 2つの文字列を連結させる関数です。
  • 第1引数の末尾にある終端文字「\0」を削除して、第2引数の文字列をコピーして連結させます。
Main.c
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char* src = ",world!";
    char dest[100] = "Hello";
    
    strcat(dest, src);
    
    printf("destは「%s」です。", dest);
    return 0;
}
実行結果
destは「Hello,world!」です。

sprintf関数

  • 書式を指定して文字列に書き込む関数です。
  • printfは書式を指定して文字列を標準出力しましたが、sprintf関数は書式を指定してメモリ領域に書き込みます。
Main.c
#include <stdio.h>

int main(void){
    char str[100];
    sprintf(str, "%sの所持金は%d円です。", "nkojima", 12611);
    
    printf("%s\n", str);
    return 0;
}
実行結果
nkojimaの所持金は12611円です。

scanf関数

  • 書式を指定してキーボードからの入力を受け取ります。
  • scanf関数では、キーボードの入力値を書き込んで欲しい「メモリ領域のアドレス」を渡す必要があるため、moneyのアドレスである&moneyを渡しています。
    • char型の配列であるnameについては、&name[0]と同義なのでそのままnameを引数として渡しています。
Main.c
#include <stdio.h>
int main(void){
    char name[100];
    int money;
    
    printf("名前と所持金を半角スペース区切りで入力してください。\n");
    scanf("%s %d", name, &money);
    
    printf("%sの所持金は%d円です。\n", name, money);
    return 0;
}
入力値
nkojima 12611
実行結果
名前と所持金を半角スペース区切りで入力してください。
nkojimaの所持金は12611円です。

補足:これまでの学習の歩み

参考URL

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?