user-0 提问: 数据结构中串的插入问题，

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: #include<stdio.h>  #define MAX_SIZE 128  typedef struct {     char ch[MAX_SIZE];     int last; }string;  void init_str(string *s, int max) {     int i;      for(i = 0; i < max; i++)         s->ch[i] = 0;     s->last = 0; }  void create_str(string *s, char *a, int n) {     int i = 0;     for(;i < n; i++)         s->ch[i] = a[i];      s->ch[i+1] = '\0';     s->last = n;     printf("你输入的字符串为:\n");     printf("%s\n",s->ch); }  void insert_str(string *s,char *substr, int len, int pos) {     int i;      if(pos < 0 || pos >= MAX_SIZE)     {         printf("输入的位置不合理!\n");         return;     }      if (s->last + len >= MAX_SIZE) {         printf("Can't insert, new string too long!\n");         return;     }      if (pos >= s->last) {    /* 若插入的位置在last之后*/         for (i = 0; i < len; i++)             s->ch[s->last+i] = substr[i];         s->ch[s->last+i] = 0;         puts(s->ch);         s->last += len;     } else {    /* 若插入的位置在ch内*/         for (i = 0; i < len; i++)             s->ch[pos+len+i] = s->ch[pos+i];          for (i = 0; i < len; i++)             s->ch[pos+i] = substr[i];         s->ch[s->last+len] = 0;         s->last += len;     } } int main() {     string s;     int pos, i;     char a[80],b[80];      init_str(&s, MAX_SIZE);     printf("请输入字符串:\n");     scanf("%s",a);      /* counter the lenght of str */     for(i = 0; a[i]; i++)         ;     create_str(&s, a, i);     printf("请输入你要插入的字符串:\n");     scanf("%s", b);      for(i = 0; b[i]; i++)         ;     printf("请输入你要插入的位置:\n");     scanf("%d",&pos);     insert_str(&s, b, i, pos);     printf("新的字符串为：\n");     printf("%s\n",s.ch);     return 0; } 可以将代码再精简一下

user: user-2
content: #include<stdio.h>  #define MAX 8  typedef struct {     char ch[MAX];     int last; }string;  void InintString(string *s,int max) {     for(int i=0;i<max;i++)         s->ch[i] = '\0';     s->last = 0; }  void CreateString(string *s, char a[],int n) {     int i=0;     for(;i<n;i++)     {         s->ch[i] = a[i];     }     s->ch[i+1] = '\0';     s->last = n;     printf("你输入的字符串为:\n");     printf("%s",s->ch);     printf("\n"); }  void StrInsert(string *s,char b[],int n,int pos) {     int i;     if(pos < 0 || pos >= MAX)     {         printf("输入的位置不合理!\n");         return;     }      if (s->last + n >= MAX) {         printf("Can't insert, new string too long!\n");         return;     }      if (pos >= s->last) {         for (i = 0; i < n; i++)             s->ch[s->last+i] = b[i];         s->ch[s->last+i] = 0;         puts(s->ch);         s->last += n;     } else {         for (i = 0; i < n; i++)             s->ch[pos+n+i] = s->ch[pos+i];          for (i = 0; i < n; i++)             s->ch[pos+i] = b[i];         s->ch[s->last+n] = 0;         s->last += n;     }    #if  0     if(s->last+n-1 <= MAX)     {         for(i = s->last+n-1;i>=n+pos-1;i--)             s->ch[i]=s->ch[i-n];         for(i=0;i<n;i++)             s->ch[i+pos] = b[i];         s->last += n;     }     else if(pos + n <= MAX)     {         for(i=MAX-1;i>n+pos-1;i--)     //这没看懂，，             s->ch[i] = s->ch[i-n];         for(i=0;i<n;i++)             s->ch[i+pos]=b[i];         s->last=MAX;     }     else     {         for(i = 0;i<MAX-pos;i++)     //这没看懂，，             s->ch[i+pos]=b[i];         s->last = MAX;     } #endif } int main() {     string s;     int n=0,pos, i;     char a[100],b[100];     InintString(&s, MAX);     printf("请输入字符串:\n");     scanf("%s",a);      /* counter the lenght of str */     for(i = 0; a[i] != '\0'; i++)         ;     n = i;      CreateString(&s, a, n);     printf("请输入你要插入的字符串:\n");     scanf("%s", b);      for(i=0, n = 0; b[i]!='\0';i++)         ;     n = i;      printf("请输入你要插入的位置:\n");     scanf("%d",&pos);     StrInsert(&s,b,n,pos);     printf("新的字符串为：\n");     printf("%s\n",s.ch);     return 0; } 求字符串的长度有问题，输入"bc"，得到的长度是1； 插入字符串的逻辑做了新的修改，可以作了一个参考吧 修改详见上面的代码