3

c 関数でランダムな 10 バイト長の文字列を生成し、目的の c から関数を呼び出す必要があります。そのため、uint8_t へのポインターを作成し、それを C 関数に渡しています。この関数はランダムなバイトを生成し、それらを *randomString に割り当てます。ただし、関数からobjective-cに戻った後、randomValueポインターはNULLを指します。

Cでの私のランダム関数は次のとおりです。

void randomString(uint8_t *randomString)
{
  randomString = malloc(10);

  char randomByte;
  char i;
  for (i = 0; i < 10; i++) {

    srand((unsigned)time(NULL));
    randomByte = (rand() % 255 ) + 1;
    *randomString = randomByte;
    randomString++; 
  }
} 

ここにobjective-cの部分があります:

uint8_t *randomValue = NULL;
randomString(randomValue); //randomValue points to 0x000000

NSString *randomString = [[NSString alloc] initWithBytes:randomValue length:10 encoding:NSASCIIStringEncoding];
NSLog(@"Random string: %@", randomString);
4

3 に答える 3

3

malloc()それ自体のような、より自然なセマンティックは次のようになります。

uint8_t * randomString()
{
    uint8_t *randomString = malloc(10);
    srand((unsigned)time(NULL));
    for (unsigned i = 0; i < 10; i++)
        randomString[i] = (rand() % 254) + 1;
    return randomString;
}
于 2012-11-06T15:19:45.027 に答える
2

ポインタは値で渡されるため、の呼び出し後もrandomValue残ります。ポインタを機能させるには、ポインタをポインタに渡す必要があります。NULLrandomString

void randomString(uint8_t **randomString) {
    *randomString = malloc(10);
    // ... the rest of your code goes here, with an extra level of indirection
}

uint8_t *randomValue = NULL;
randomString(&randomValue);
于 2012-11-06T15:15:46.647 に答える
1

uint8_t **randomeValueの代わりに使用する必要がありuint8_t *ます。

于 2012-11-06T15:21:49.983 に答える