3

需要在 c 函数中生成一些随机的 10 字节长度的字符串,并从 Objective-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

指针是按值传递的,所以randomValueNULL调用randomString. 您需要将指针传递给指针才能使其工作:

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 回答