1

struct私が呼ばれたとしましょうtest

struct  test
{
    char name[16];

} test;

nameユーザーの入力を読み取ってフィールドに入れたい。ユーザーが入力として入力したとしましょう"hello"。私のコードは次のようなものです:

struct test test1;

strcpy(test1.name, user_input);

現在、名前には 5 文字 ( "hello") が含まれていますが、実際の入力用に 5 文字、残りの空白を含む 16 文字にしたいと考えています。どうすればそれを達成できますか?

4

3 に答える 3

5

sprintf() はそれを行うことができます:

sprintf(test1.name,"%-15s","John Doe");
printf("[%s] length of test1.name: %ld\n",test1.name,strlen(test1.name));
sprintf(test1.name,"%-*s",(int) sizeof(test1.name) - 1,"Jane Jones");
printf("[%s] length of test1.name: %ld\n",test1.name,strlen(test1.name))

出力:

[John Doe       ] length of test1.name: 15
[Jane Jones     ] length of test1.name: 15

また

#include <stdio.h>
#include <string.h>

int copy_with_pad(char *destination,const char *source, int dest_size, char pad_char)
{
   int pad_ctr = 0;
   if (dest_size < 1 ) return -1;
   int source_length = strlen(source);
   int data_size = dest_size - 1;
   destination[data_size] = '\0';
   int i = 0;
   while (i < data_size)
   {
      if ( i >= source_length )
      {
         destination[i] = pad_char;
         pad_ctr++;
      }
      else
         destination[i] = source[i];
      i++;
   }
   return pad_ctr;
}


int main(void)
{
   struct test {
      char name[16];
   };
   struct test test1;
   int chars_padded = copy_with_pad(test1.name,"Hollywood Dan",
                                    sizeof(test1.name),' ');
   printf("%d padding chars added: [%s]\n",chars_padded,test1.name);
   chars_padded = copy_with_pad(test1.name,"The Honorable Hollywood Dan Jr.",
                                 sizeof(test1.name),' ');
   printf("%d padding chars added: [%s]\n",chars_padded,test1.name);
   chars_padded = copy_with_pad(test1.name,"",16,' ');
   printf("%d padding chars added: [%s]\n",chars_padded,test1.name);
}

出力

2 padding chars added: [Hollywood Dan  ]
0 padding chars added: [The Honorable H]
15 padding chars added: [               ]
于 2012-10-14T06:23:08.977 に答える
2

明らかなことは次のようなものだと思います。

memset(test1.name, ' ', 16);

size_t len = min(16, strlen(user_input));

memcpy(test1.name, user_input, len);

余分なスペースをゼロで埋めたい場合は、かなり簡単です。

strncpy(test1.name, user_input, 16);

strncpy [誰かが実際に正しい答えになりそうな質問をするのを見た/聞いたのは初めてです。]

于 2012-10-14T05:52:08.063 に答える
0
// first remember
// that  a character array of length 16 can only hold a string of 15
// chars because it needs the trailing zero
// this program puts in the user input (you should check that it is short enough to fit)
// then puts in the spaces, one at a time, then the terminating zero

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

int main()
{
    char name [16];         // room for 15 chars plus a null terminator
    char word [] = "hello"; // user input

    strcpy(name,word);      // copy user input to name
    int i;
    for (i = strlen(name); i < (sizeof(name)-1); i++) {
        name[i] = ' ';      // pad with blanks
    }
    name[sizeof(name)-1] = 0; // string terminator

    printf("name = \"%s\"\n",name);
    return 0;
}
于 2012-10-14T08:32:14.153 に答える