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)
如我所见,问题出在
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 *按照第一个参数的要求传递。
那就是说,还有两件事,
要一次复制一个char,只需使用分配,例如
word[j] = str[i];
Run Code Online (Sandbox Code Playgroud)您应该只遍历输入数组直到有效条目为止,而不是整个大小(10)。如果输入较小,您将再次点击UB。