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

时间:2015-02-03 22:03:57

标签: c string char

我希望通过用户输入接收整数 x ,并在'#'中返回长度为 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] = '\0';
}

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

2 个答案:

答案 0 :(得分:1)

C没有完整的字符串数据类型。 “C字符串”只是char值的连续序列,由值为0的字符(可以拼写为'\0')终止。

对你的问题非常重要的是,(1)char是一个整数数据类型,(2)不同的分隔符用于字符串文字而不是(单 - )char文字, (3)字符串文字计算指针到C字符串的第一个字符。

因此,这......

char hash = "#";

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

char hash = '#';

此外,要通过其中一个printf() - 族函数打印C字符串,您需要使用编辑描述符%s

printf("%s", xhash);

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

答案 1 :(得分:0)

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

对于创建字符串的函数,您有两个选项。您可以让调用者传入一个指向数组的指针(如果您是智能的话,还有数组大小),并且函数会将其填入。第二个选项是函数内的malloc并返回指针给来电者。

要记住的另一件事是标准C库。您的append函数基本上是memset,然后在结尾处设置为零。你应该只调用memset而不是自己循环。

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

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