删除字符串的最后一个字符

Delete last character of a string

为什么此代码不起作用?

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

int main(void)
{
// local declarations
int len;
char* pStr;

// statements
printf(" how many characters you want to enter?\n");
scanf("%d", &len);
pStr=(char*)calloc(len+1,sizeof(char));
printf("\n enter your string:  ");
gets(pStr);
*(pStr+len)='[=10=]';
printf("\n your string: ");
puts(pStr);
printf(" oops! last character deleted.");

getch();
return 0;
}

虽然它运行正确,但当我使用 scanf 函数读取字符串时,但是 为什么它不使用 gets?

因为数组是从零开始的,并且(假设输入有效且长度正确,假设您的代码不应该这样做)*(ptr + len) 已经包含 [=11=] 而您只是覆盖它.您打算覆盖 ptr[len-1]

scanf("%s", pStr) 跳到第一个非空白字符,而 gets 则不会。

在第一个 scanf 之后,尾随的换行符仍在输入缓冲区中,因此当您调用 gets 时,结果是一个空行,除非您在数字后面输入了额外的字符。

请注意,由于存在严重的安全漏洞,gets 被标记为 已过时 。 建议使用 gets(var) 替换为 fgets(var, length, stdin).