2016-06-22 2 views
-2
const char* string_b10_e2 = {"base 10"}; //base 10 

Есть ли способ считывать значение «base 10» в не постоянной строковой переменной? Я знаю, что я не могу использовать символ *, как показано нижеЧтение константы строки до не постоянной переменной в C

char * str, 
str = string_b10_e2; //not allowed 

как это нарушает обещание держать строковую константу.
Но есть ли способ прочитать значение в непостоянной строке?

Заранее спасибо.

+3

Вы можете скопировать строку. [strcpy] (http://www.cplusplus.com/reference/cstring/strcpy/) – tkausl

+3

'const char * string_b10_e2 = {" base 10 "};' не является хорошим – Boiethios

+0

или strdup ....... – pm100

ответ

2

Есть ли способ считывать значение «base 10» в неизменной строке переменной?

Вы можете использовать union

union fake { 
    const char *as_const; 
    char *as_non_const; 
}; 

union fake x; 
x.as_const = string_b10_e2; 

, а затем использовать x.as_non_const, но имейте в виду, что вы не можете изменить его содержимое (это еще в только для чтения сегмента данных)

2

Вы не может назначить строку указателю char * после инициализации с использованием обычного оператора присваивания.

Вы можете, однако, использовать функцию strcpy. Если вы объявите его как указатель вместо массива с фиксированной длиной, вам также необходимо выделить память для строки:

char *str = NULL; 
str = malloc(20); 
if(str == NULL) return; 
strcpy(str, "Hello World!\n") 
printf("%s", str); 
free(str); 
str = NULL; 
+0

Не накладывайте 'void *' на указатели в C. И ваш код представляет собой серьезный риск безопасности, если исходная строка является переменной/параметром. – Olaf

+0

@ Олаф риска для безопасности?Пожалуйста, объясните –

+0

Что произойдет, если исходная строка имеет длину> 19? – Olaf

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

  • Нет связанных вопросов^_^