Const char * str Issue - PullRequest
       10

Const char * str Issue

1 голос
/ 22 января 2012

Я должен использовать fputs, чтобы напечатать что-то, а fputs берет "const char * str", чтобы распечатать. У меня есть 3 строки для печати (мне все равно, строки это или символ []) как str. Я не знаю правильный способ сделать это. Я использовал 3 строки, и я добавил их к одной, но не работает. Я также пытался преобразовать строку в символ , но ничего не работает! Любые рекомендации?

struct passwd* user_info = getpwuid(getuid()); 
struct utsname uts;
 uname(&uts);

Я хочу, чтобы мой символ const * str = user_info-> pw_name + '@' + uts.nodename

Ответы [ 2 ]

3 голосов
/ 22 января 2012

Для этого вам нужно создать новую строку. Я понятия не имею, зачем вам ограничение fputs, но я предполагаю, что даже если вы не можете / не хотите использовать fprintf, у вас все равно есть snprintf. Вы бы тогда сделали это так:

char *new_str;
int new_length;

// Determine how much space we'll need.
new_length = snprintf(NULL, "%s@%s", user_info->pw_name, uts.nodename);
if (new_length < 0) {
    // Handle error here.
}
// Need to allocate one more character for the NULL termination.
new_str = malloc(new_length + 1);
// Write new string.
snprintf(new_str, "%s@%s", user_info->pw_name, uts.nodename);
2 голосов
/ 22 января 2012

Возможное решение:

/* 1 for '@' and 1 for terminating NULL */
int size = strlen(user_info->pw_name) + strlen(uts.nodename) + 2;
char* s = malloc(size);

strcpy(s, user_info->pw_name);
strcat(s, "@");
strcat(s, uts.nodename);


/* Free when done. */
free(s);

EDIT:

Если C ++, вы можете использовать std::string:

std::string s(user_info->pw_name);
s += "@";
s += uts.nodename;

// s.c_str(); this will return const char* to the string.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...