Так меня попросили эти 2 вопроса в моем interview-Копирование строки из одного указателя на другой в одном процессе, а также между 2 процессами
1-что, если у меня есть фрагмент кода, как это в C, что будет выходной
char *ptr1=malloc(10);
ptr1="abc";
char *ptr2 = malloc(20);
ptr2="defghi";
strcpy(ptr1,ptr2);
printf("%s",ptr1);
Я попробовал этот на моем терминале после возвращения домой, и он дает эту ошибку
[1] 7673 bus error ./b.out
Я хотел бы знать, как скопировать строку в таком случае от одного указателя на Аноф э.
2- Мы имеем 2 процесса А и В
Это код в способе А
char *ptr1=malloc(10);
ptr1="abc";
char *ptr2 = malloc(20);
ptr2="defghi";
strcpy(ptr1,ptr2);
теперь адрес ptr1 передается процессу Б с использованием межпроцессного взаимодействия и код в процессе B (ptr1 является адресом из процесса A)
char *ptr3=malloc(10);
ptr3=ptr1
printf("%s",ptr3);
Каким будет результат этого? Если ans - значение мусора или ошибка, то каким образом мы можем сделать ptr3, указывая на строку, указанную ptr1.
Этот код не имеет смысла. Вы выделяете память на ptr1, а затем назначаете ptr1 постоянному строковому значению. Это фиксируется где-то в памяти. Вы не можете просто скопировать «defghi» в ptr1. – OldProgrammer
Они тестируют, если вы знаете, что делает код C. Просто вы не дали интервью. В случае 1 вы не только перезаписываете указатели 'malloc' указателями строковых литералов и пытаетесь скопировать один строковый литерал в другой, но тот, который вы копируете (даже если он является законным), меньше. –
@OldProgrammer Я не понял, почему этот код не имеет смысла. По мне сначала мы выделили некоторое пространство для ptr1, затем мы заполнили «abc» в этом пространстве, мы сделали то же самое для ptr2, а затем попытались заполнить ptr1 кусок с тем, что присутствует в ptr2, а затем распечатать результат. Пожалуйста, скажите мне, где я ошибаюсь. –