C вопросом о передаче строки как функции agrument - PullRequest
0 голосов
/ 03 августа 2011

Я хотел бы передать строку для работы, как это ..

 long_var = get_value("long_value");
 short_var = get_value("short_value");

Внутри функции я так и сделал ..

double get_value(char *get_type){

   if  (*get_type == "short_value")
   {
        //calculate and return
    }
   else if  (*get_type == "long_value")
   {
         //calculate and return
    }  
}

Однако у меня ошибка Ошибка: main.c (334): аргумент функции №1 типа 'flash unsigned char [11]' несовместим с обязательным параметром типа 'unsigned char *'

Я думал, что строка - это просто массив символов, и я могу назвать это ..

Кроме того, есть ли лучший способ сделать это ..

Спасибо ..

Ответы [ 3 ]

6 голосов
/ 03 августа 2011

Вам нужно будет включить <string.h> и изменить свой код на

 if (!strcmp(get_type, "short_value"))

Как сейчас, вы сравниваете символ (*get_type) с указателем на символ ("short_value").

4 голосов
/ 03 августа 2011

Вы должны передавать константные строки как "const char *" или даже "const char * const".Кроме того, c-строки являются простыми массивами, и использование операции == для них будет просто сравнивать указатели, а не строки.Вы должны использовать функцию strcmp для сравнения.

3 голосов
/ 03 августа 2011

Строковые литералы имеют тип const char[], который при вызове функции затухает до const char *, поэтому вы должны сделать сигнатуру вашей функции double get_value(const char *).

Во-вторых, когда вы разыменовываете *get_type, вы получаете один символ , а не всю строку! И затем вы пытаетесь сравнить этот символ с массивом (который снова распадается на указатель) - это не работает. Что вам нужно, это strcmp (или его вариант):

if (!strcmp(get_type, "short_value")) { ... }`

Если вы предпочитаете, вы можете сказать strncmp(get_type, "short_value", 12) и сравнить только начальные 12 символов, которые равны длине «short_value», включая завершающий нулевой байт - не обязательно, но полезно знать о длине строки, когда используя функции манипуляции со строками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...