根据用户输入附加到 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
用于输出单个字符。
我想通过用户输入接收一个整数 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
用于输出单个字符。