Извлечь две строки из строки с пробелом - PullRequest
0 голосов
/ 01 марта 2020

предположим,

char nickAndPwd[] = "John 1234";

я хочу получить nick ="John" и password = "1234". Как я могу это сделать?

Это то, что я сделал, но, кажется, не работает должным образом

int main() {  

  char nicknameAndPwd[] = "Alessandro 12345678901";
  char nick[10];
  char pwd[11];

  int nickLength = 10;
  int pwdLength = 11;

  memcpy( nick, &nicknameAndPwd[0], nickLength);
  nick[nickLength] = '\0';

  memcpy(pwd, &nicknameAndPwd[nickLength+1], pwdLength);
  pwd[pwdLength] = '\0';

  printf("%s\n", nick);
  printf("%s\n", pwd);

  return 0;
}

Как это исправить?

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Если вы не знаете точно длину имени и пароля, вам, вероятно, стоит попробовать что-то вроде этого.

/**
  gcc -std=c99 -o prog_c prog_c.c \
      -pedantic -Wall -Wextra -Wconversion \
      -Wc++-compat -Wwrite-strings -Wold-style-definition -Wvla \
      -g -O0 -UNDEBUG -fsanitize=address,undefined
**/

#include <stdio.h>

void
test_function(const char *nicknameAndPwd)
{
  printf("testing with <%s>\n", nicknameAndPwd);
  char nick[11]; // assume no more than 10 useful chars
  char pwd[12]; // assume no more than 11 useful chars
  if(sscanf(nicknameAndPwd, "%10s %11s", nick, pwd)==2)
  {
    nick[10]='\0'; // ensure string termination if input was too long
    pwd[11]='\0'; // ensure string termination if input was too long
    printf("  nick <%s>\n", nick);
    printf("  pwd <%s>\n", pwd);
  }
}

int
main(void)
{
  test_function("Alessandro 12345678901");
  test_function("Shorter 1234567");
  test_function("NowItIsLonger 1234567");
  return 0;
}
0 голосов
/ 01 марта 2020

Измените свой код на:

  nick[nickLength-1] = '\0';
  pwd[pwdLength-1] = '\0';

И nick, и pwd имеют диапазон [0,size-1].

Более общий способ разделения строки: Пробел может быть:

#include<string.h>
#include<stdio.h>
int main() {  

  char nicknameAndPwd[50];
  char *p;
  fgets(nicknameAndPwd,50,stdin);
  if (p=strchr(nicknameAndPwd,'\n')) *p='\0';
  p = strchr(nicknameAndPwd,' ');
  char nick[25];
  char *pswd;
  strncpy(nick,nicknameAndPwd,p-nicknameAndPwd);
  pswd = nicknameAndPwd+(p-nicknameAndPwd)+1;
  puts(nick);
  puts(pswd);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...