#include<stdio.h>
#include<stdlib.h>
//串的结构体定义
typedef struct{
char *ch;
int length;
}SqString;
//函数原型声明
void InitString(SqString &S);
void CreatString(SqString &S,int n);
void PrintString(SqString S);
int main(void){
SqString S,T;
InitString(S);
InitString(T);
CreatString(S,10);
printf("\n");
CreatString(T,4);
printf("\n");
PrintString(S);
PrintString(T);
return 0;
}
void InitString(SqString &S){
S.ch=(char*)malloc(sizeof(char)*256);
S.length=0;
}
void CreatString(SqString &S,int n){
int i;
for (i=0;i<n;i++){
scanf("%c",&S.ch[i]);
}
S.length=i;
}
就是这样一个情况,求解答,谢谢!
(良心回答)
参照着上图,先给你指出问题,再对你提出几点建议哈,仅供参考:
1、首先,你在输入第一个字串之后,输入了一个回车符,它被你的第二个SqString.ch在调用scanf的时候接收掉了。所以你的第二个字串就少了一个字符(准确来说,是那个\n将你的字串的位置给挤掉了)
2、其次,你的字串的末尾没有'\0'呦。如果你用%s打印的话,假如你的编译器对语法检测比较严格的话,是会打印出乱码的。你可以向上面一样在末尾给它加上一个'\0'。
所以,你之所以打印的两个字串不在同一行,实际上就是这个'\n'导致的。这也就解释通了。要不然就会成这样。(如下图)
3、这个问题的解决方法其实很简单,你可以直接用一个比如getchar();卡在中间,然后让其接受掉这个'\n'就行了。(不过你最好还要打印一个'\n'出来)(如下图)
如果还有什么没明白的,或者是我没有说清楚的,欢迎在下方评论。
望采纳哈!
第二个字符串少一个字符是因为输入第一个字符串之后的回车键被第二个字符串当作字符输入了。你可以在CreaString()
函数里加个判断来忽略回车键。
没有打印函数的实现?