我一直在尝试在命令外壳中编写用户给出的单词,但是由于某种原因,我的程序在read()函数后立即退出,因此main()中的文本:“在main2 \ n”中甚至书面。我一直在寻找问题大约一个小时,但似乎找不到它。

# include <stdio.h>

void write_zin(const char* zin,int length_zin){
     const char * runner =zin;
     printf("out of loop\n");
     while(runner!=(runner+length_zin)){
             printf("%c",*runner);
             runner++;
     }
}

void read(char* zin,int NUMBER_LETTERS,int NUMBER_WORDS){
     int i ;
     char woord[NUMBER_LETTERS+1];
     zin[0]='\0';
     for(i =0;i<NUMBER_WORDS;i++){
        printf("Give a word with %i letters\n",NUMBER_LETTERS);
        scanf("%s",woord);
        strcat(zin,woord);
        strcat(zin,'\0');
     }
     strcat(zin,'\0');
}


int main(){
    const int NUMBER_LETTERS = 5;
    const int NUMBER_WORDS = 2;
    char zin[(NUMBER_LETTERS+1)*NUMBER_WORDS];
    printf("in main 1\n");
    read(zin,NUMBER_LETTERS,NUMBER_WORDS);
    printf("in main 2\n");
    write_zin(zin,(NUMBER_LETTERS+1)*NUMBER_WORDS);
    printf("in main3\n");

    return 0;
}

最佳答案

您的代码中有几个错误:


功能void read(char* zin,int NUMBER_LETTERS,int NUMBER_WORDS)


如果将用'\0'分隔的单词连接起来,则最终将只有一个字符串,因为每个字符串函数都将在第一个'\0'处停止,并且不再处理其他字符。因此,您不能使用strcat(zin,'\0');
 如果要标记字符串之间的分隔,请使用另一个特殊字符作为'\n'最终功能将是:

void read(char* zin,int NUMBER_LETTERS,int NUMBER_WORDS){
  int i ;
  char woord[NUMBER_LETTERS+1];
  for(i =0;i<NUMBER_WORDS;i++){
       printf("Give a word with %i letters\n",NUMBER_LETTERS);
       scanf("%s",woord);
       strcat(zin,woord);
   }
}


2.功能void write_zin(const char* zin,int length_zin)
您永远无法在循环内更改循环的条件。那就是您正在做的事情,因为跑步者总是在循环内变化,而且这也是您状况的一部分。

while(runner!=(runner+length_zin)){
         printf("%c",*runner);
         runner++;
 }


最后的功能是:

void write_zin(const char* zin,int length_zin){
 const char * runner =zin;
 printf("out of loop");
  while(*runner){
       printf("'%c'",*runner);
       runner++;
 }


}

关于c - 为什么我的写方法没有初始化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24886693/

10-11 21:23