我基本上想要一个任意长度的字符串,但是一个固定大小的输出字符串。因此,如果我为x
分配一个包含10个字符的字符串,我希望在第二个printf
处以5个字符的字符串结尾。如果x
是3个字符,我想添加空格以使字符串为5个字符。
这是我到目前为止的代码,但它不起作用,因为我甚至无法访问索引,它是段错误的;
int main()
{
char x[] = "d dddddddd";
printf(x);
printf("");
// separate
printf(x[1]);
return 0;
}
谢谢,我想知道这在C中是否可行,但您也可以在C ++中尝试
编辑: 我的2个代码在这里,它们都溢出了;
char first[40];
char g[] = " Level %d %d Fruit %d:%d ";
char d[41] = {0};
strncpy(d, g, 40);
if(strlen(d) < 40) {
for(i = strlen(d); i < 40; i++) {
d[i] = ' ';
}
}
n = sprintf(first, d, gol, gift, minutes, secs );
第二战略;
char first[40];
char b[40];
strncpy(b, g, sizeof(b));
fgets(b, 40, stdin);
n = sprintf(first, b, gol, gift, minutes, secs );
将我的n打印到游戏的屏幕上,我收到了我的文字和一些未知字符。对不起,我无法发布整个游戏代码,因为它的4000行长分为10个文件。我会欣赏一种完全不同的方式,从一串多个字符中获取一个只有40个字符的字符串。
答案 0 :(得分:2)
像这样:
printf("%-5.5s", x);
格式转换%-5.5s
由以下内容组成:
char*
。有关详细信息,请参阅man sprintf
如果您打算截断或扩展对sprintf
的调用的结果(这可能是对评论的解释),那么答案就是使用{{1} },但仅当您准备将截断作为格式化输出的末尾时。这是一个小玩具:
snprintf
试运行:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv) {
int limit = atoi(argv[1]);
for (int j = 2; j < argc - 1; j+=2) {
int n = atoi(argv[j]);
char buffer[limit + 1];
# format split into two for explanatory purposes:
# %d %s is the format for the output
# %*.0s takes two arguments, length and "",
# and adds length spaces to the end of the output
# Because we're using snprintf, the output is truncated.
if (snprintf(buffer, limit+1, "%d %s" "%*.0s",
n, argv[j+1],
limit, "") < 0) {
perror("snprintf");
return 1;
}
if (strlen(buffer) != limit)
fprintf(stderr, "buffer length is %zd instead of %d\n",
strlen(buffer), limit);
printf("|%s|\n", buffer);
}
return 0;
}
答案 1 :(得分:1)
在第三次printf
来电中,如果你想在第一位显示角色,你应该这样做:
printf("%c", x[1]);
要附加字符串,请查看strcat
:http://www.cplusplus.com/reference/cstring/strcat/?kw=strcat
例如:
char first[1000] = "Hello", sec[] = " world";
strcat(first, sec); /* destination, source */
但是strcat
是不安全的,所以请自己设置安全的strcat:
char *safecat(char *dest, const char *src, size_t siz)
{
return strncat(dest, src, siz);
}
要阅读最多 n 个字符,请阅读fgets
,将stdin
作为信息流传递:http://www.cplusplus.com/reference/cstdio/fgets/?kw=fgets
例如:
char buf[MAXBUF];
fgets(buf, MAXBUF, stdin); /* this only reads MAXBUF - 1 characters. The
rest is left in stdin */
答案 2 :(得分:1)
你可以为它编写自己的函数:
void print_five(char *s)
{
int i = 0;
char d[6] = {0};
strncpy(d, s, 5);
if(strlen(d) < 5) {
for(i = strlen(d); i < 5; i++) {
d[i] = ' ';
}
}
printf("%s", d);
}
int main(void)
{
char d[10] = "helloooo";
char m[4] = "h";
print_five(d);
printf("continued\n"); //hellocontinued
print_five(m);
printf("continued\n"); //h continued
return 1;
}