2012-01-22 3 views
1

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

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

Я хочу, чтобы мой обугленного сопз * ул = user_info-> pw_name + '@' + uts.nodename

ответ

2

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

/* 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. 
+0

я получаю «недопустимое преобразование из„недействительным *“до„символ *“ – BlackM

+0

Хотя код является правильным, [использование' strcat' опасно] (HTTP: //stackoverflow.com/questions/936468/why-does-msvc-consider-stdstrcat-to-be-unsafe-c) и его следует избегать (то же самое для 'strcpy'). – DarkDust

+1

Угадайте, что это источник C++, поэтому возвращайте значение cast из 'malloc()' в 'char *'. Если вы используете C++, тогда рекомендуется использовать 'std :: string' вместо управления памятью самостоятельно. – hmjd

3

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

char *new_str; 
int new_length; 

// Determine how much space we'll need. 
new_length = snprintf(NULL, "%[email protected]%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, "%[email protected]%s", user_info->pw_name, uts.nodename); 
+0

+1 для безопасности .. – hmjd

Смежные вопросы