将单个字符从字符数组复制到C中的另一个字符数组

Jam*_*mes -2 c arrays loops strcpy

我对C编程并尝试改进尚不陌生。我已经看到了一些与此类似的问题,并尝试使用strncpy实施他们的建议,但仍然无法正常工作。谁能给我正确方向的指针?谢谢。

该代码的目的是给一个字符串,并在找到空白时将其拆分。我故意不使用strtok()

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

char str[10] ;
char word[10] ;
int i, j, k, l ;

  int main()
{
  printf("Please enter a string of ten characters and I'll find the blanks\n") ;
  fgets(str,10,stdin) ;

  printf("Original string is %s\n", str) ;

  j = 0 ;

  for(i == 0 ; i < 10 ; i++){
    if(!isblank(str[i])){
      strncpy(word[j], &str[i], 1) ;
      printf("i = %d, j = %d, str[i] = %c, word[j] = %c\n",i, j, str[i], word[j]) ;
      j++ ;
    }else{
      printf("%s\n",word) ;
      j = 0 ;
    }
  }
  return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 5

如我所见,问题出在

for(i == 0 ; i < 10 ; i++)
      ^^
Run Code Online (Sandbox Code Playgroud)

您应该使用赋值(=),例如

for(i = 0 ; i < 10 ; i++)
Run Code Online (Sandbox Code Playgroud)

设置的初始值i。否则,通过访问未初始化的局部变量的值(其值在没有初始化的情况下是不确定的),您的代码将调用未定义的行为

然后,的用法strncpy()也看起来不对,您没有char *按照第一个参数的要求传递。

那就是说,还有两件事,

  1. 要一次复制一个char,只需使用分配,例如

    word[j] = str[i];
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您应该只遍历输入数组直到有效条目为止,而不是整个大小(10)。如果输入较小,您将再次点击UB。