Хорошо, я действительно переживаю K & Книга RC (я знаю, что она устарела и у нее много устаревших вещей, особенно на безопасность, но я просто пытаюсь сделать упражнения). Я играл с упражнением 5-2, где мне нужно реализовать свой собственный strcat с указателями. Мой код выглядит следующим образом:Обучающие C-указатели я не могу понять, почему это не работает (K & R excercise 5-2)
#include <stdio.h>
#include <stdlib.h>
char *Strcat(char *string1, const char *string2);
int main(void){
char string1[100]="hello";
char string2[100]="1234";
printf("%s",Strcat(string1,string2));
return 0;
}
char *Strcat (char *string1, const char *string2){
int i=0;
char *temp=string1;
while(*string1){// move the pointer to find the end of the string
++string1;
}
while(*string1++=*string2++)//copy string 2 at the end of string 1
;
puts(string1);//print string 1 concatenated with string 2
return temp;//send back temp pointing to string1 for printing
}
Мой вопрос, почему если я пытаюсь напечатать строку1 внутри функции он просто печатает пробелы? Не должен ли он печатать всю строку? Если я печатаю temp, это нормально, поскольку он запускает функцию печати до тех пор, пока не найдет «\ 0», но при попытке со строкой 1 кажется, что она помещена в '\ 0', если указатель не вернется в строку1 [0] position ?. Это, вероятно, что-то простое, но я не могу понять, почему это происходит ...
Любая помощь приветствуется! благодаря!!!
'++ string1'. Вы потеряли начало исходной строки. – kaylum
Hi Kaylum! Спасибо за быстрый ответ! я так думаю, поэтому я думал, что мой мозг по-прежнему думал, что магически функция puts вернет указатель обратно в начало строки1, но имеет смысл, что нет никакого способа узнать, как теперь он полагает, что строка1 начинается с этого что я переехал. Еще раз спасибо! : D – jaferic
использовать 'puts (temp);' вместо этого вот что такое temp для –