2014-09-22 3 views
0

В приведенном ниже результате результат переполнения стека. Хотя нулевой символ существует с обеих строк, поэтому цикл strcpy должен заканчиваться, поскольку исходная строка имеет нулевой символ. Почему происходит переполнение стека?strcpy функция с указателями на массив символов

#include <stdio.h> 
#include<strings.h> 
int main(void) { 
    char *str="Hello world"; 
    char *str1="Good morning"; 
    strcpy(str,str1); 
    printf("%s",str); 
    return 0; 
} 

ответ

7

Ошибка не переполнение стека, а изменение строкового литерала.

str - это указатель, который указывает на строковый литерал "Hello world", а изменение строкового литерала - неопределенное поведение.

str Изменить на:

char str[100] = "Hello world"; 
+0

Средства полукокса * ул является по умолчанию сопзЬ символ * ул ?? Если да, то почему это не происходит в массивах типов данных, отличных от char? – Siya

+0

@Siya Читать [В чем разница между char s \ [\] и char * s в C?] (Http://stackoverflow.com/questions/1704407/what-is-the-difference-between-char-s и-символ-ы-в-с) –