Const char * str问题

时间:2012-01-22 15:51:45

标签: c string char

我必须使用fputs来打印一些东西,而fputs需要“const char * str”来打印出来。 我有3个字符串要打印(我不在乎它是字符串还是char [])作为 str。 我不知道正确的方法。我使用了3个字符串,然后我将它们添加到一个字符串中但不起作用我也尝试将字符串转换为char ,但没有任何工作! 有什么建议吗?

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

我想要我的char const * str = user_info-> pw_name +'@'+ uts.nodename

2 个答案:

答案 0 :(得分:3)

您需要为此创建一个新字符串。我不知道您为什么需要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);

答案 1 :(得分: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);

编辑:

如果使用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.