【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18752

可変文字列について
投稿者---へっぽこC(2004/12/15 22:49:25)


どなたか教えてください。
下記のようにsizeを引数として受けて、その数を文字列の配列として
使用したいのですが、エラーとなってしまいます。
このような時はどうすればよいのでしょうか?
宜しくお願いします。

void Abc(int size){
 char Moji[size];


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:可変文字列について 18755 RiSK 2004/12/15 23:24:12
<子記事> Re:可変文字列について 18757 monkey 2004/12/15 23:28:41
<子記事> Re:可変文字列について 18764 Hermit 2004/12/16 07:47:17


No.18755

Re:可変文字列について
投稿者---RiSK(2004/12/15 23:24:12)


>下記のようにsizeを引数として受けて、その数を文字列の配列として
>使用したいのですが、エラーとなってしまいます。

文字の配列('\0'終端) == 文字列
文字列の配列 == char **

区別をつけましょう。

#include <string.h>
#include <stdio.h>

void hoge(char s[], size_t size)
{
    // s はchar型へのポインタでありchar型配列ではない
    printf("sizeof(s) == %lu, size == %lu\n", sizeof(s), size);
}

int main(void)
{
    char s[BUFSIZ] = {0};
    hoge(s, BUFSIZ);
    return 0;
}



この投稿にコメントする

削除パスワード

No.18756

Re:可変文字列について
投稿者---RiSK(2004/12/15 23:28:17)


補足:
#include <string.h> いらないです。

hoge(s, BUFSIZ); は
hoge(s, sizeof(s) と同じです。


この投稿にコメントする

削除パスワード

No.18757

Re:可変文字列について
投稿者---monkey(2004/12/15 23:28:41)


malloc関数で必要なサイズのメモリを確保します。
使用後にfree関数で解放するのを忘れないようにしましょう。

// exam.
#include <stdlib.h>
#include <stdio.h>

void Abc( int size )
{
    char* Moji;
    int i;

    // 文字列用のメモリブロック確保
    Moji = (char*)malloc( sizeof( char ) * size + 1 ); // 終端文字'\0'用に +1

    for( i = 0; i < size; i++ ){
        Moji[i] = 'A' + i;
    }
    Moji[i] = '\0'; // 終端文字を付加
    printf( "%s\n", Moji );

    // メモリ解放
    free( Moji );
}

int main( void )
{
    Abc( 26 );
    return 0;
}

/* 実行結果:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
*/



この投稿にコメントする

削除パスワード

No.18764

Re:可変文字列について
投稿者---Hermit(2004/12/16 07:47:17)


gcc を使うってのはどうでしょう。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧