1

私は比較的 C でのプログラミングの初心者であり、配列とポインターで非常に混乱しています。

基本的に、私がやろうとしているのは、バイナリを含む文字列を指定された長さに拡張することですlen;(つまり、 len=8 はnum[]=101を生成し"00000101"ます)。

誰かがこれの何が問題なのかを理解するのを手伝ってくれますか?

const char * extendBinary(char num[], int len) {
        char *number = #
        int length = len;
        int difference;
        if(strlen(*num)<len) {
            difference = len-strlen(num);
            while(difference>0)
            {
                &number = strcat("0", &number);
                difference--;
            }
        }
        return number;
    }
4

4 に答える 4

1

問題は仕様から始まります。私があなたを正しく理解していれば、文字の配列と長さを渡す関数が必要です。入力文字の配列のサイズは、1 からlen?の間になります。ただし、関数は配列のサイズを知る方法がありませんnum。これを機能させたい場合は、関数を次のように定義する必要があります

const char * extendBinary(char *num, size_t num_len, int len);

が指すバッファを関数がオーバーランしないようにしますnum。これはポインターを渡すための一般的なメカニズムであるため、に置き換えたことに注意してくださいchar num[]char *numポインターを配列に渡し、そのポインターを逆参照して元の型 (サイズを含む) に戻すことはできません。これは、C で許可されていないことの 1 つにすぎないため、通常のポインターと別のサイズ変数を使用してください。

最後に、メモリ リークが必要でない限り、メモリ割り当てを処理する必要があります。したがって、extendBinary を呼び出す人は、使い終わったらその戻り値を解放する必要があると簡単に言えます。

const char * extendBinary(char *num, size_t num_len, int len) {
    char *ret = malloc(len + 1);
    int i;

    memset(ret, '0', len);
    ret[len] = 0;
    strncpy(&ret[len - num_len], num, num_len);

    return ret;
}

int main(void) {
    char arr[] = {'1', '0', '1'};
    const char *formatted = extendBinary(arr, sizeof(arr), 8);

    printf("%s\n", formatted);
    free(formatted);
    return 0;
}
于 2013-04-25T20:11:00.170 に答える
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//case 1: for num[9]="101";
char *extendBinary1(char num[], int len) {
    int num_len = strlen(num);
    memmove(num + (len - num_len), num, num_len);
    memset(num, '0', (len - num_len));

    return num;
}

//case 2: for "101";//pointer to const char 
char *extendBinary2(const char num[], int len) {
    int num_len = strlen(num);
    char *number = calloc(len + 1, sizeof(char));
    memset(number, '0', (len - num_len));

    return strcat(number, num);
}


int main(void){
    char num[9] = "101";
    char *number = extendBinary2("101", 8);//dynamic allocate

    printf("%s\n", extendBinary1(num, 8));
    printf("%s\n", number);//free(number);

    return 0;
}
于 2013-04-25T21:18:31.510 に答える