繁体   English   中英

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

[英]Append to C String Based on User Input

我想通过用户输入接收一个整数x ,并以'#'s返回一个长度为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

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

但是,对您的问题非常重要的是:(1) char是整数数据类型,(2)字符串文字使用的分隔符与(single-) char文字使用的分隔符不同,并且(3)字符串文字计算的指针指向 C字符串的第一个字符。

因此,这...

char hash = "#";

...尝试将指针存储在hash ,可能导致指针值的最后一个字节。 相反,您需要这样做:

char hash = '#';

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

printf("%s", xhash);

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

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

对于创建字符串的函数,您有两个选择。 您可以让调用者传入一个指向数组的指针(如果您很聪明,还可以传入数组的大小),然后函数将其填充。第二种选择是在malloc内部进行malloc分配并将指针返回给调用者。

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

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

最后,如果您不熟悉C编程,则应该在编译时打开所有警告。 编译器警告会告诉您有关无效的printf格式字符串和无效的char分配的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM