Упражнение K&R 5-3: Объявление указателей против массивов

Я пробираюсь через язык программирования K&R C и в настоящее время нахожусь на Главе 5 (Указатели). У меня проблема с Упражнением 5-3:

"Напишите указатель версии функции strcat, которую мы показали в главе 2: strcat(s, t) копирует строку t в конец s".

Я написал код ниже:

#include<stdio.h>

void pointer_strcat(char *stringOne, char *stringTwo);

main(){

char *initialString = "Flash. ";
char *middleString = "Welcome.";  
char *addedString  = "Thunder.";

pointer_strcat(initialString, addedString);
printf("%s \n", initialString);

} 

void pointer_strcat(char *stringOne, char *stringTwo){

while(*stringOne++ != '\0'){
}
*stringOne--;
while( (*stringOne = *stringTwo) != '\0'){
    stringOne++;
    stringTwo++;
}
}

Я пытался внимательно следить за примерами в этой главе, но всякий раз, когда я запускаю этот код, происходит зависание, и я получаю всплывающее окно, в котором говорится, что.exe перестал работать, прежде чем вернуться в командную строку. Я все время возился с кодом и обнаружил, что если я изменю объявления строковых указателей на массивы (*initialString становится initialString[]), все работает именно так, как я хочу. Это меня особенно раздражает, потому что на странице 83 говорится:

"Как формальные параметры в определении функции, char s[]; и char *s; эквивалентны;..."

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

0 ответов

Другие вопросы по тегам