我希望通过用户输入接收整数 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
答案 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
赋值。