是否有任何功能可用于打印某些字符而不是整个字符串?

时间:2012-02-03 08:40:51

标签: c

char str[] = "hello world";
printf("%s",str);  

printf语句在到达'\0'

之前打印字符串中的所有字符

那么如果我想在str上仅打印stdout的第4个字符呢?

7 个答案:

答案 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是您要打印的字符数。