Malloc'ed строка содержит значения мусора - PullRequest
0 голосов
/ 28 мая 2009

Я только что преобразовал библиотеку Objective-C в библиотеку C в надежде сделать ее кроссплатформенной. Тем не менее, все выглядит нормально, пока я не отправлю эту вещь на обработку.

Это в тот момент, когда я получаю ошибку.

Оглядываясь назад, я заметил кое-что в отладчике.

Сразу после строки malloc:

char *theString = malloc(SOME_SIZE * sizeof(char));

Я бы увидел, что theString - это \ x03, а * theString - "3 '\ 003'".

Сначала я предположил, что это было просто странное воспоминание, так как я не надевал strcat или что-либо еще, но этот странный начальный символ переносится и повторяется в любой другой момент, когда я выполняю подобный malloc.

С точки зрения нормальной обработки это нормально. К сожалению, я не понимаю, что это такое, в противном случае я бы просто сделал что-то радикальное, например, отрезал первого персонажа или что-то в этом роде.

Может ли кто-нибудь объяснить мне, что это такое и как я с этим справляюсь, если я хочу безопасно преобразовать его в строку NSString?

1 Ответ

9 голосов
/ 28 мая 2009

Значение, возвращаемое malloc, не гарантируется для какого-либо определенного значения. Гарантируется, что указанная вами память будет иметь длину не менее указанной вами длины. Если вы хотите, чтобы память обретала какое-то значение, вам нужно сделать это самостоятельно. Или альтернативно используйте calloc, который обнулит память.

...