scanf two char [] в функции в C и возвращает первый обратно, но печатает второй - PullRequest
0 голосов
/ 28 марта 2020

Я Java программист и не совсем хорош в C. Сегодня я пытался отсканировать две строки и в конце концов вернуть первую строку обратно в функцию main (), но на выходе получилась вторая строка.

Я знаю, что у меня есть другой способ завершить эти коды, и я сделал это работать с помощью mallo c (в комментариях ниже). Но я просто очень хочу знать, что здесь происходит. Может ли кто-нибудь помочь мне взглянуть на этот беспорядок?

Код

#include<stdio.h>
#include<stdlib.h>
#define len 5
char* shuffle();
char* scanfList();

int main()
{
   printf("hello\n");
   //char *list = malloc(2*len*sizeof(char));
   char * list;
   list = shuffle();
   printf("%s\n",list);
   return 0;
}

char* shuffle() {
   //char *p1 = malloc(len*sizeof(char));
   //char *p2 = malloc(len*sizeof(char));
   static char * p1, * p2;
   p1 = scanfList();
   p2 = scanfList();
   printf("shuffle%s\n",p1);
   printf("shuffle%s\n",p2);
   return p1;
}

char* scanfList() {
    printf("Please input a list:\n");
    //char *list = malloc(len*sizeof(char));
    static char list[len];
    scanf("%s",list);
    return list;
}

Вывод

HHH$ ./a.out
hello
Please input a list:
123
Please input a list:
456
shuffle456
shuffle456
456

1 Ответ

0 голосов
/ 30 марта 2020

предлагает объявить массивы в функции main() и передать указатель на подфункцию (ы), аналогично:

#include <stdio.h>
#include <stdlib.h>

#define LEN 256

void shuffle( char *, char * );
void scanfList( char * );

int main( void )
{
   char p1[ LEN ];
   char p2[ LEN ];
   printf( "hello\n" ); 
   shuffle( p1, p2 );
   printf( "%s--%s\n", p1, p2 );
   return 0;
}

void shuffle( char *list1, char *list2 )
{

   scanfList( list1 );
   scanfList( list2 );
   printf( "shuffle %s\n", list1 );
   printf( "shuffle %s\n", list2 );
}

void scanfList( char *list ) 
{
    printf( "Please input a list:\n" );
    if( scanf( "%255s", list ) != 1 )
    {
        printf( "%s\n", "scanf for input failed, exiting\n" );
        exit( EXIT_FAILURE );
    }
}

, вот типичный прогон приведенного выше кода:

hello
Please input a list:
abc
Please input a list:
def
shuffle abc
shuffle def
abc--def
...