C程序-输出中的特殊字符
这个程序的输出在开头给出了一个特殊的字符。原因是什么C程序-输出中的特殊字符,c,C,这个程序的输出在开头给出了一个特殊的字符。原因是什么 #include<stdio.h> #include<conio.h> #include<string.h> main() { int i, j,count=0,nl; char str2[100]; char str1[100]; char str[100]; char init[8]; char final[8]; //clrscr();
#include<stdio.h>
#include<conio.h>
#include<string.h>
main() {
int i, j,count=0,nl;
char str2[100];
char str1[100];
char str[100];
char init[8];
char final[8];
//clrscr();
printf("enter the bit string: ");
gets(str);
puts(str);
strcat(init,"10101010");
strcat(final,"10101010");
strcpy(str1,(strcat(init,str)));
strcpy(str2,(strcat(str1,final)));
puts(str2);
printf("%d",(strlen(str2)));
getch();
}
#包括
#包括
#包括
main(){
int i,j,count=0,nl;
char-str2[100];
char-str1[100];
char-str[100];
char init[8];
半决赛[8];
//clrsc();
printf(“输入位字符串:”);
获取(str);
put(str);
strcat(初始,“10101010”);
strcat(最终版本,“10101010”);
strcpy(str1,(strcat(init,str));
strcpy(str2,(strcat(str1,final));
看跌期权(str2);
printf(“%d”)(strlen(str2));
getch();
}
您不能在init
上使用strcat()
,因为它未初始化,您至少需要nul
终止符,例如
init[0] = '\0';
但我建议改为strcpy()
strcpy(init, "10101010");
不需要上述初始化方法,但需要额外字符
但是,您需要为nul
终止符添加一个额外字符,即
char init[9];
而不是char init[8]
另外,gets()
是一个不推荐使用的函数,因为它有可能使缓冲区溢出,所以您应该使用fgets()
来代替,如
fgets(str, sizeof(str), stdin);
您需要一个
NUL
终止的字符串来使用strcat
改变
char init[8];
char final[8];
到
请注意,get
已被弃用,请更改为
fgets(str, sizeof str, stdin);
/* remove the trailing newline */
char *ptr = strchr(str, '\n');
if (ptr) *ptr = '\0';
strcat()
必须用于初始化的字符串,因为它必须先找到当前字符串的结尾,然后才能执行其操作。由于init
和final
应该为空,因此最好使用strcpy()
此外,C中的字符串以null结尾,这意味着在末尾总是有一个额外的符号\0
。存储字符串10101010
实际上需要9个字节init
和final
只能占用8个字节
另外,您正在尝试strcat(init,str)
<此时code>init
已满,因此您尝试附加到其中的任何附加char
都将超出限制并覆盖堆栈。此应用程序将调用未定义的行为,可能会崩溃init
必须足够大,以容纳str
的内容加上9个字节。不要使用gets()
strcat()
必须用于初始化字符串,因为它必须先找到当前字符串的结尾,然后才能执行其操作。改为使用strcpy()。
fgets(str, sizeof str, stdin);
/* remove the trailing newline */
char *ptr = strchr(str, '\n');
if (ptr) *ptr = '\0';