Копирование строки без strcpy с использованием указателей - PullRequest
0 голосов
/ 20 декабря 2018

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

#include<stdio.h>
void main()
{
  char str[10];
  char str1[10];
  printf("Enter a string");
  scanf("%s",str);
  char *p;
  char *q;
  int len=0,i=0;
  p=&str;
  q=&str;

  while (*p!='\0')
  {
    len=len+1;
    p=p+1;
  }

  printf("%d",len);
  printf("\n");

  while (len>0)
  {
    str1[i]=*q;
    len=len-1;
  }

  printf("%s",str1);
}

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вот вам пример:

char *mystrcpy(char *dest, const char *src)
{
    char *saveddest = dest;
    while(*src)
    {
        *dest++ = *src++;
    }
    *dest = 0;
    return saveddest;
}

или

char *two_in_one_strcpy_strlen(char *dest, const char *src, size_t *len)
{
    char *saveddest = dest;

    *len = 0;
    while(*src)
    {
        *dest++ = *src++;
        *len++;
    }
    *dest = 0;
    return saveddest;
}
0 голосов
/ 20 декабря 2018

str1[i] всегда один и тот же элемент, потому что вы никогда не увеличиваете i.Таким образом, все остальные элементы остаются нетронутыми, и никогда не будет возможности скопировать нулевой терминатор q.

Затем, когда вы его печатаете, программа имеет неопределенное поведение.

Вероятно, было бы лучше зациклить i от 0 до len.

Вам также следует рассмотреть возможность инициализации ваших массивов с помощью = {}, чтобы они в первую очередь содержали нули.

Кроме того, ваш scanf чрезвычайно небезопасен, так как не выполняет проверку границ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...