2012-04-25 4 views
0

c89 ССАГПЗ (GCC) 4.6.3NUL завершение указатель

Здравствуйте,

Я получаю дамп стека на * поиск = '\ 0'; Я думал, что можно nul завершить строку.

char *ptr_name = "[email protected]"; 
char *search = ptr_name; 

search = strchr(ptr_name, '@'); 
search++; 
*search = '\0'; 

Большое спасибо за любые предложения,

+0

Вы вероятно письменном виде постоянных данных. – Nick

+0

http://c-faq.com/decl/strlitinit.html – cnicutar

+0

'ptr_name' не является строкой. Это указатель на строку (только для чтения). – pmg

ответ

1

char *ptr_name = "[email protected]"; создает константу строки и не может быть изменен.

Чтобы получить результат, который вы ожидаете, что вам нужно выделить память для "[email protected]" с использованием массива char arr_name[] = "[email protected]"; - или динамически с помощью malloc во время выполнения.

Ваша программа должна выглядеть следующим образом:

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char arr_name[] = "[email protected]"; 
    char *search = arr_name; 

    printf("%s \n", arr_name); 
    search = strchr(arr_name, '@'); 
    search++; 
    *search = '\0'; 

    printf("%s \n", arr_name); 

    return 0; 
} 

Выход:

$ ./a.out 
[email protected] 
[email protected] 
$ 
2

ptr_name указывает на строку в только для чтения области.

Вместо этого попробуйте:

char ptr_name[] = "[email protected]" 
1

Не тогда, когда это буквальный Const, вы не можете. Вы можете использовать strcpy() в стек или переменную кучи, тогда вы можете ее изменить.

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