见
char str[] = "hello world";
printf("%s",str);
printf语句在到达'\0'
那么如果我想在str
上仅打印stdout
的第4个字符呢?
答案 0 :(得分:6)
您只需在printf格式字符串中指定字段宽度:
#include <stdio.h>
int main(void)
{
const char *s = "Hello world !";
printf("%.4s\n", s);
return 0;
}
或者,如果要在运行时指定字段宽度:
#include <stdio.h>
int main(void)
{
const char *s = "Hello world !";
const int fw = 4;
printf("%.*s\n", fw, s);
return 0;
}
在任何一种情况下,输出都是:
Hell
答案 1 :(得分:2)
对于第一个字符,您可以使用:
printf ("%c", *str); // or
printf ("%c", *(str+0)); // or
printf ("%c", str[0]);
对于不同的角色,只需伸出并使用偏移量抓住它。对于偏移量为3的第二个l
:
printf ("%c", str[3]); // or
printf ("%c", *(str+3));
对于子字符串,您可以使用该方法的组合以及printf
的最大字段宽度功能:
printf ("%.2s", str+3); // prints "lo"
使用所有这些解决方案,您需要确保不要在null终止符的错误一侧启动。那不是一件好事: - )
如果您想要一个适用于任何字符串的通用解决方案,并且在查找起点方面相对安全,您可以使用:
void outSubstr (FILE *fh, char *str, size_t start, size_t sz, int padOut) {
if (start >= strlen (str)) {
if (padOut)
fprintf (fh, "%*s", sz, "");
return;
}
if (padOut)
fprintf (fh, "%-*.*s", sz, sz, str + start);
else
fprintf (fh, "%-.*s", sz, str + start);
}
参数如下:
fh
是要写入的文件句柄。str
是字符串的开头。start
是开始打印的偏移量。sz
是要打印的最大字符数。padOut
是一个标记,表示sz
也是最小大小。如果字符串中没有足够的字符来满足大小,则输出将在右侧填充空格。答案 2 :(得分:2)
您可以在格式字符串中使用%c:
printf("%c", *s);
打印'H'
打印任意字符:
printf("%c", s[3]);
打印'l'
答案 3 :(得分:1)
最多可打印4个字符。
printf("%.4s", str);
答案 4 :(得分:1)
there is also a "substr()" function
that return the substring from complete string.
example
printf("%s",substr(str,0,4));
it has syntax like this
substr(arrayName,charStartingPosition, lengthOfCharacters);
i hope this is easy to understand and no need to write more than 1 statement.
答案 5 :(得分:0)
系统真的不那么痛苦:
int main(void)
{
char c;
c = 'z';
write(1, &c, 1);
}
这里不需要沉重的stdio
然后你可以......
char *s = "Hello, World!";
write(1, s, numberOfChars);
或者如果你真的想通过char来做char:
void printnchars(char *s, int n)
{
int i;
i = 0;
while (i <= n)
{
write(1, s + i, 1);
i++;
}
}
答案 6 :(得分:-1)
numOfChars = 4;
printf("%.*s\n", numOfChars, "Hello, world!");
其中numOfChars
是您要打印的字符数。