[英]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.