我对 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 *
。
现在,还有两件事,
要一次复制一个
char
,您只需使用赋值即可,例如word[j] = str[i];
您应该只循环输入数组直到有效条目,而不是整个大小(10)。如果输入较小,您将再次点击 UB。
关于C 中将一个字符从一个字符数组复制到另一个字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37169766/