首页 > 解决方案 > 为什么 c 没有在 strncpy 函数中读取 i 的值

问题描述

我正在尝试编写一个程序,删除每个新行后的最后一个字母。我不知道为什么它不工作,但如果我在strncpy函数中设置 i 的值,它可以工作的任何数字。

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
  int i;
  char s[]="ordinateur";
  char a[strlen(s)+1];
  for (i=0;i<=strlen(s);i++)
  {
    strncpy(a,s,(10-i));
    printf("%s\n",a);
  }

  return 0;
}

标签: c

解决方案


问题是,strncpy当您只复制源字符串的一部分时,不会 NUL 终止字符串。所以你需要自己处理。

一种方法是添加这个

memset(a, 0, strlen(s)+1);

就在之前strncpy

另一种方法是添加这个

a[10-i] = '\0';

就在之后strncpy

也就是说,请注意您不需要strncpy在循环内删除最后一个字母。你可以简单地做:

int main()
{
  int i;
  char s[]="ordinateur";
  for (i=strlen(s); i>0 ; i--)
  {
    printf("%s\n",s);
    s[i-1] = '\0';     // Remove last char
  }

  return 0;
}

推荐阅读