使用指针操作打印输入的字符串

Printing entered string using pointer manipulation

我是指针的新手,请告诉我如何打印输入的字符。

    #include <stdio.h>
    #include <stdlib.h>

   int main()
   {
      char *ptr;
      ptr = malloc(32 * sizeof(char));
      *ptr = 'h';
      ptr++;
      *ptr = 'e';
      ptr++; 
      *ptr = 'l';
      ptr++;
      *ptr = 'l';
      ptr++;
      *ptr = 'o';
      ptr++;
      *ptr = '\n';

      printf("value entered is %s\n", ptr);

      return 0;
    }

我要打印你好

您忘记了空终止符。添加:

ptr++;
*ptr = '[=10=]';

此外,指针现在指向空终止符(或以前的换行符)。您必须将其重新设置为再次指向 'h'

ptr -= 6;

完成后,您应该释放内存:

free(ptr);

您可以使用 calloc() 函数,而不是使用 malloc() 函数,它实现与 malloc() 相同的目标,但用 '\0' 填充内存。这使得使用非固定长度的字符串更容易。
您可以找到此函数的文档 here.

这是我编写的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  char *ptr;
  ptr = calloc(32,sizeof(char));
  *ptr = 'h';
  ptr++;
  *ptr = 'e';
  ptr++; 
  *ptr = 'l';
  ptr++;
  *ptr = 'l';
  ptr++;
  *ptr = 'o';
  ptr++;
  *ptr = '[=10=]';  //It should be null terminated

  ptr -= 5;
  printf("value entered is %s\n", ptr);

  free(ptr);

  return 0;
}

您应该像这样使用临时指针修复您的代码:

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
  char* ptr;
  ptr = malloc(32 * sizeof(char));
  if(ptr == NULL)
  {
    puts("Allocation failed");
    return EXIT_FAILURE;
  }

  char* tmp = ptr;

  *tmp = 'h';
  tmp++;
  *tmp = 'e';
  tmp++; 
  *tmp = 'l';
  tmp++;
  *tmp = 'l';
  tmp++;
  *tmp = 'o';
  tmp++;
  *tmp = '[=10=]'; // NOTE: null termination not \n

  printf("value entered is %s\n", ptr);
  free(ptr);    

  return 0;
}

没有乱七八糟的指针运算的正确版本如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (void)
{
  char* ptr;
  ptr = malloc(32 * sizeof(char));
  if(ptr == NULL)
  {
    puts("Allocation failed");
    return EXIT_FAILURE;
  }

  strcpy(ptr, "hello");
  printf("value entered is %s\n", ptr);
  free(ptr);

  return 0;
}