根据用户输入附加到 C 字符串

Append to C String Based on User Input

我想通过用户输入接收一个整数 x,return 一个长度为 x 的字符串,在 ' #的。

x = 4

⇒“####”

是否有可能的简单解决方案,大致如下:

printf( "%c * x = %c", hash, x, hash*x);

目前,我的在线发现让我创建了一个迭代程序:

#include <stdio.h>
#include <string.h>

//function creates xhash with width '#' characters 
void append( char* xhash, char hash, int x )
{
    int i = 0;
    for ( i = 0; i < x; i++ )    {  xhash[i] = hash;  }
    xhash[x] = '[=11=]';
}

int main ( void )
{
    int x = 0;
    scanf( "%d", &x );

    char xhash[250] = ""; 
    char hash = "#";

    append( xhash, hash, x );

    printf( "%c", xhash );

    return 0;
}

这给了我一个奇怪的设计:▒

我发现 C 字符串非常混乱,来自 Python 我会使用的地方

str.append(i) 

str = "#" * x

C 中的字符串只是一个字节数组,后跟一个零字节。这就是他们的全部。

对于创建字符串的函数,您有两种选择。您可以让调用者传入一个指向数组的指针(以及数组大小,如果您很聪明的话),然后函数将其填充。第二个选项是在函数内部 malloc 和 return指向调用者的指针。

要记住的另一件事是标准 C 库。您的 append 函数本质上是 memset 然后在末尾设置一个零。您应该只调用 memset 而不是执行自己的循环。

而且我认为您得到的输出很奇怪,因为字符串的 printf 格式是 %s 而不是 %c%c 格式适用于单个字符。

最后,如果您不熟悉 C 编程,您应该在编译时打开所有警告。编译器警告会告诉您错误的 printf 格式字符串和无效的 char 赋值。

C 没有完整的字符串数据类型。 "C strings" 只是连续的序列,如果 char 值,由值为 0 的字符终止(可以拼写为 '[=15=]')。

但是,对于您的问题非常重要的是 (1) char 是整数数据类型,(2) 字符串文字使用的定界符与 (single-)char 不同字面值,以及 (3) 字符串字面值求得 指向 C 字符串第一个字符的指针

因此,这个...

char hash = "#";

... 尝试将指针存储在 hash 中,可能会导致指针值的最后一个字节。相反,你想要这个:

char hash = '#';

此外,要通过 printf() 系列函数之一打印 C 字符串,您需要使用编辑描述符 %s:

printf("%s", xhash);

描述符%c用于输出单个字符。