2016-02-24 3 views
-2

Я столкнулся с немного кода на C, который делает что-то вроде следующего. Просто интересно, может ли кто-нибудь сказать мне, что происходит в этом коде, потому что я никогда раньше не встречал ничего подобного. Линия I заботятся о том, где один путь задается значениеКастинг строки без знака long int

int main(void) 
{ 
    unsigned long path; 

    //... 

    void init (void) 
    { 
     path = (unsigned long) "somevariable"; 
    } 

    init(); 

return 0; 
} 

Я попытался искать вокруг, чтобы понять это, но я не мог найти ничего, что помогло. Просто интересно, может ли кто-нибудь разъяснить, что происходит. В частности, мне интересно:

  1. Что назначено для пути? Является ли это char * cast для unsigned long?
  2. Если путь является адресом строки «somevariable», то какова область действия «somevariable»? Имеет ли он область локально для функции init или имеет ту же область действия, что и путь? И как он распределяется (автоматический или динамический)?
  3. Если кто-то знает раздел стандарта c, на который можно ссылаться, чтобы понять это, это также будет оценено.
+1

«* что-то вроде следующего» - * вздох *. снова преследуя призраков? –

ответ

2

1) Да, это значение указателя приведение к unsigned long
2) Строковый литерал всегда статически выделяется в постоянной памяти
3) Вы можете обратиться к Section 6.4.5 (String Literals)

+0

Спасибо! Смогу ли я прочитать значение пути извне функции init? –

+0

@MattSteadman Да. Значение, назначенное переменной, сохраняется до тех пор, пока оно не будет переназначено. – emlai

+0

Да, поскольку он статически выделяется. –

1

Yo не может бросить строку без знака долго, вы должны использовать функцию, как strtoul()

http://www.tutorialspoint.com/c_standard_library/c_function_strtoul.htm

+0

Это не код, который я когда-либо писал (по той же причине). Это код, с которым я столкнулся, что я пытаюсь понять. –

+0

Вы правы. Это действительно странно –

+0

Корзина этого сайта и его примеры. Единственное его значение - «кодирование». –