[cdev] утилита dd
Grigoriy A. Sitkarev
sitkarev на komitex.ru
Сб Май 1 22:01:34 MSK 2010
Здравствуйте.
Федюк Сергей пишет:
> Здраствуйте
> внес изменения в утилиту, чтобы опции if и of не были жёстко привязаны к конкретной позиции
> но возникла проблема
> Проблема вот в этой строчке в name при написании в строчке dd2 if=1 of=2
> должно быть в последовательно в первом вхождении ша
> во втором of
> при написании printf("s",name);
> так и отобразиться, а всравнении неверно
> подскажите как правильно записать эту строку
> if (name == "if") {
> input_file = val;
> input_flags = 1;
> } else {
> if (name == "of") {
> output_file = val;
> output_flags = 1;
> }
> }
Вам не понятно как Си работает со строками. Вообще говоря такого типа
как "строка" в Си нет. Строка в Си это не что иное как последовательно
размещённые байты с ASCII-символами (массив из char) завершающийся
специальным символом '\0' (его код равен двоичному 0). Так как строка
это массив, то можно работать с ней также как с массивом и использовать
указатели при работе со строками тоже удобно.
Поэтому строки сравниваются как последовательности байтов. Или вы пишете
свою функцию или же пользуетесь библиотечными. Т.к. у вас есть
стандартная библиотека Си, то на выбор есть минимум две функии это
strcmp(3) и strncmp(3). Читайте man-страницу, будут вопросы - пишите.
if (strcmp(name, "if") == 0) {
input_file = val;
input_flags = 1;
}
У вас сравниваются не строки, а значения указателей т.е. адреса ячеек.
--
Г.А.
Подробная информация о списке рассылки cdev