使用指针操作打印输入的字符串
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;
}
我是指针的新手,请告诉我如何打印输入的字符。
#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;
}