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

标签 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 ;
}

最佳答案

据我所知,问题在于

for(i == 0 ; i < 10 ; i++)
      ^^

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

for(i = 0 ; i < 10 ; i++)

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

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

现在,还有两件事,

  1. 要一次复制一个char,您只需使用赋值即可,例如

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

关于C 中将一个字符从一个字符数组复制到另一个字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37169766/

相关文章:

c - 尝试将加密或解密的文件输出到文本文件中

从windows到linux的交叉编译源

javascript - For循环每次只添加相同的对象而不是不同的对象属性

C#:foreach 主值调用了多少次?

c - 为什么我尝试用 typedef 定义自然类型不起作用?

c - 您将如何接收与 'sendfile' 一起发送的文件?

php 内爆(101)带引号

php - 防止将空数组插入数据库。 PHP

arrays - 将 String 转换为 Double 并检查是否为 nil

java - 速度:在最后一个循环迭代中做一些事情