Пока я пытался решить проблему с Деннисом Ритчи. Я получил следующую ошибку. Но я понятия не имею, почему это происходит. Похоже, это должно работать.
Я использую MacOS Mojave и стандартный компилятор gcc.
Мой исходный код следующий.
#include <stdio.h>
#include <string.h>
// copies most n characters of t to s;
char *sstrcnpy(char *s, char *t, int n)
{
// *pointer - content of the pointer will be assigned
char *ret; // ret stores the content of the dst
while(n--){
*ret++ = *t++;
}
printf("%s\n", ret);
return ret;
}
int main()
{
char *s = "Destination";
char *t = "sour";
char *sstrcnpy(char *s, char *t, int n);
sstrcnpy(s,t,3);
printf("%s\n", s);
return 0;
}
Тогда, когда я пытаюсь запустить этот код. Терминал дал мне следующую ошибку.
nasantogtokhs-MacBook-Pro:C nasaa$ ./5_5
Segmentation fault: 11
Или вместо ошибки сегментации, в некоторых других исходных кодах это было
bus error: 10
Тогда я попытался откопать, используя lldb Mac. Тогда я получил следующую ошибку.
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
frame #0: 0x0000000100000ef7 5_5`sstrcnpy(s="Destination", t="our", n=2) at exercise_5_5.c:10
7 // *pointer - content of the pointer will be assigned
8 char *ret; // ret stores the content of the dst
9 while(n--){
-> 10 *ret++ = *t++;
11 }
12 printf("%s\n", ret);
13 return ret;
Я думаю, что это связано с доступом к памяти. Кажется, как-то мой компьютер не позволяет присваивать значение указателю на содержимое отдельной функции. Но я видел другие примеры. Кажется, это должно работать просто отлично.
Спасибо за ваше время.