在C语言中,将单个字符从一个字符数组复制到另一个字符数组

在C语言中,将单个字符从一个字符数组复制到另一个字符数组,c,arrays,loops,strcpy,C,Arrays,Loops,Strcpy,我对C语言编程相当陌生,正在努力改进。我已经看到了一些类似的问题,并尝试使用strncpy实现他们的建议,但仍然不起作用。谁能给我一个指向正确方向的指针吗?谢谢 代码的目的是得到一个字符串,并在找到一个空格时将其拆分。我故意不使用strtok 在我看来,问题在于 for(i == 0 ; i < 10 ; i++) ^^ 设置i的初始值。否则,通过访问未初始化的局部变量(其值在没有初始化的情况下是不确定的)的值,您的代码将调用 然后,strncpy的用法看起来也是错误的,您没

我对C语言编程相当陌生,正在努力改进。我已经看到了一些类似的问题,并尝试使用strncpy实现他们的建议,但仍然不起作用。谁能给我一个指向正确方向的指针吗?谢谢

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


在我看来,问题在于

for(i == 0 ; i < 10 ; i++)
      ^^
设置i的初始值。否则,通过访问未初始化的局部变量(其值在没有初始化的情况下是不确定的)的值,您的代码将调用

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

现在,也就是说,还有两件事

要一次复制一个字符,只需使用赋值,如

word[j] = str[i];
您应该只在输入数组上循环,直到找到有效的条目,而不是整个10。如果输入更小,您将再次点击UB


我认为您的问题在于strncpy函数中没有指向dest参数的指针

strncpy(word[j], &str[i], 1) ;
        ^
为strncpy函数添加指向目标的指针

strncpy(&word[j], &str[i], 1) ;

除了修复Sourav Ghosh提到的问题之外,你还应该拥有它。

正如我在@James上评论的那样,这在没有strep的非BSD上是一个真正的问题。 strtok和strtok_r都有根本性的缺陷,它们单方面跳过任何大于1的相邻分隔符序列

我使用了这个解决方案: 为了填补上面的空白,以便我可以获得所有有效负载的适当标记化。 读者请注意,上面的解决方案有一个缺陷…所以你可能需要多次调用它…不是最优的,但如果你像我一样匆忙,我使用了它,它工作了

  while(strstr(token, ";;")!=NULL) {
                 token = replaceWord(token, ";;", "; ;");
                 (void) sprintf (v_sg_TempMsg, "Massaged the input agsId to token:[%s]", token);
                 printf(v_sg_TempMsg);
                 ++tokenCounter;
                 if(tokenCounter==15) {
                     break;
                 }
   }//while(strstr(token, ";;")!=NULL) {

…以上是一个黑客获取调用有缺陷的代码,最终删除所有出现的分隔符…这是肮脏的代码,所以请,没有火焰器…它是为了帮助那些因为缺少替代strtok和strtok_r skipping的替代方案而被封锁的人。

感谢您的解释非常有帮助谢谢您的建议非常有帮助这是strtok和strtok_r在非BSD系统上的一个真正问题,而在非BSD系统上,strtok和strtok_r没有可用的STREP。因此,我将投票支持被否决的职位。
strncpy(&word[j], &str[i], 1) ;
  while(strstr(token, ";;")!=NULL) {
                 token = replaceWord(token, ";;", "; ;");
                 (void) sprintf (v_sg_TempMsg, "Massaged the input agsId to token:[%s]", token);
                 printf(v_sg_TempMsg);
                 ++tokenCounter;
                 if(tokenCounter==15) {
                     break;
                 }
   }//while(strstr(token, ";;")!=NULL) {