2010-08-06 5 views
2

Это странно. Надеюсь, я задам правильный вопрос:Чтение строки из файла с целью C

Я использую метод md5 для создания значения контрольной суммы, которое затем пишу в файл. Затем после этого я прочитал этот файл с помощью этого:

NSString * id_From_File = [[NSString alloc] 
            initWithContentsOfFile:path_to_ID 
            encoding:NSUTF8StringEncoding 
            error:&error]; 

В результате получает помещенный в NSString, который при печати дает мне очень странное поведение. Например, когда я использую это для печати,

id_with_date = [NSString stringWithFormat:@" %@ %@", dateString, id_From_File]; 

он будет печатать обе строки, если DateString помещается в первом параметре и id_From_File во втором. Если я переключу их (что мне нужно сделать), отобразится только id_From_File.

Edit 1: Пример переключателя:

id_with_date = [NSString stringWithFormat:@" %@ %@", id_From_File, dateString]; 

Я твердо считаю, что это что-то делать с кодировкой строки id_From_File.

Любые знания !?

Спасибо,

+0

который не должен иметь. Можете ли вы опубликовать код при его переключении – vodkhang

+0

Вы имеете в виду, когда меняю порядок параметров? Проверьте Edit 1 выше. –

+0

Как описано, поведение не имеет никакого смысла. Я бы предложил создать небольшой тестовый проект, который показывает проблему, которую люди могут загрузить. Это поможет либо кому-то найти проблему, либо вы сами ее обнаружите в процессе ее создания. – wadesworld

ответ

10

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

- (id)initWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error 

Этот метод автоматически определяет кодировку файла вместо их декодирования с фиксированной один.

0

Я решил проблему!

Это связано с тем, что некоторые строки используют нулевой символ для идентификации конца. Позвольте мне объяснить:

Допустим, у вас две строки: одна с нулевым символом в конце, а другая - нет. В зависимости от того, каким образом вы их заказываете, они будут читаться по-разному при конкатенировании.

"somestring(null char)" + "another string" 

выше, в какой-то код, будет читать

somestring 

если места переключился

"another string" + "somestring(null char)" 

тогда вы получите

"another string somestring" 

Мой простой хак, чтобы это исправить было сделать новую строку с su bstring из «некоторой строки», которая легко избавилась от последнего символа, который вызывал ошибку.

Надеюсь, это ясно и полезно!

+1

Надеюсь, вы используете '+' как стенографию и не говорите, что вы выполняете конкатенацию строки Objective-C с ней? Поскольку это не приведет к конкатенации строк, это сделает арифметику указателей. –

+2

Eric Brotto: Реальный вопрос, почему вы пишете нулевой символ в файл в первую очередь. –

Смежные вопросы