user-0 提问: 【c语言入门题】新手指针运用不熟，感谢解答。

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: int main （）  {     while (1) {           char *p ........     } }  所有的变量和初始化，都框到while体里面去， 就没有初始化的弊端了

user: user-0
content: 引用 15 楼 寻开心的回复:最后的输出换行是多余的吧。 自己试试 您好，请问您知道怎么写这个循环语句，可以输入数据多次吗？

user: user-0
content: 引用 15 楼 寻开心的回复:最后的输出换行是多余的吧。 自己试试 我试了一下，不是这个问题。 我觉得或许是不能重复输入数据的问题 但我不知道怎么写这个循环语句 如果写while（1）的话，oj就显示runtime error segmentation fault

user: user-2
content: 最后的输出换行是多余的吧。 自己试试

user: user-0
content: 引用 13 楼 寻开心 的回复:str[][10] 越界，跑偏了  我将数组扩大后，可以得到正确结果了，但oj上还是显示我答案错误是为什么？  #include<stdio.h> #include<string.h> int main() {     char *p,str[100][100],c,a[100];     int i,j,count=0,num=0,com;     p=str[0];     for(i=0;;i++)     {         j=0;         while((c=getchar())!='\n'&&c!=' ')             str[i][j++]=c;         if(c==' '){str[i][j]='\0';num++;}         else if(c=='\n'){str[i][j]='\0';num++;break;}     }     for(i=0;i<num-1;i++)     {         for(j=0;j<num-i-1;j++)         {             com=strcmp(str[j],str[j+1]);             if(com>0)             {                 strcpy(a,str[j]);                 strcpy(str[j],str[j+1]);                 strcpy(str[j+1],a);             }         }     }     for(i=0;i<num;i++)     {         if(count==0)printf("%s",str[i]);         else printf(" %s",str[i]);         count++;     }     printf("\n");     return 0; }

user: user-2
content: str[][10] 越界，跑偏了

user: user-2
content: 输入的字符串最多要9个字符， 多了就造成ptr【】【10】越界，影响到别人来了呗

user: user-0
content: 引用 10 楼 寻开心 的回复:你这个编译都过不去 str[i]  是字符串， 你和一个空字符如何做比较呢   for(i=0;;i++)     {         scanf("%s",str1[i]);         if(str1[i][0]==' ')         {             num=i;             break;         }         printf("i=%d  str1=%s", i, str1[i])     }  永远也退不出这个循环， 用scanf你就返回不了空格  您好，我新写了一个有输出的代码： #include<stdio.h> #include<string.h> int main() {     char *p,str[100][10],c,a[100];     int i,j,count=0,num=0,com;     p=str[0];     for(i=0;;i++)     {         j=0;         while((c=getchar())!='\n'&&c!=' ')             str[i][j++]=c;         if(c==' '){str[i][j]='\0';num++;}         else if(c=='\n'){str[i][j]='\0';num++;break;}     }     for(i=0;i<num;i++)     {         for(j=0;j<num;j++)         {             com=strcmp(str[i],str[j]);             if(com<0)             {                 strcpy(a,str[i]);                 strcpy(str[i],str[j]);                 strcpy(str[j],a);             }         }     }     for(i=0;i<num;i++)     {         if(count==0)printf("%s",str[i]);         else printf(" %s",str[i]);         count++;     }     printf("\n");     return 0; }  当我随便输入几组数据时结果正确，比如： 输入Mhh KaKa HaMaMa LaLa 输出HaMaMa KaKa LaLa Mhh  但当我输入Michael KangKang HangMeiMei LiLei 却会输出HangMeiMeiKangKang KangKang LiLei LiLei 请问这是怎么回事呢？

user: user-2
content: 你这个编译都过不去 str[i]  是字符串， 你和一个空字符如何做比较呢   for(i=0;;i++)     {         scanf("%s",str1[i]);         if(str1[i][0]==' ')         {             num=i;             break;         }         printf("i=%d  str1=%s", i, str1[i])     }  永远也退不出这个循环， 用scanf你就返回不了空格

user: user-0
content: 引用 8 楼 寻开心 的回复:scanf（“%s“， str）； 你输入abc def kdkdkd会车 str里面只容纳abc三个字符  scanf（“%s%s”, str1, str2） 你输入 abc             def会车 str1 是abc str2 是def 中间的那些空格都送给马克思了      char str1[100], str2[100];     scanf("%s%s", str1, str2);     printf("%s\n%s\n", str1, str2); 你可以自己测试测试  不好意思，我还是不太清楚我的代码没有输出的原因是什么。 我写了一个简单的代码输入数据到二维数组里，再将二维数组里的数据逐个原样输出，但还是在输入数据后按回车无输出 代码如下： #include<stdio.h> #include<string.h> int main() {     char str1[100][10];     int i,count=0,num=0;     for(i=0;;i++)     {         scanf("%s",str1[i]);         if(str1[i]==' ')         {             num=i;             break;         }     }     for(i=0;i<num;i++)     {         if(count==0)printf("%s",str1[i]);         else printf(" %s",str1[i]);         count++;     }      return 0; }

user: user-2
content: scanf（“%s“， str）； 你输入abc def kdkdkd会车 str里面只容纳abc三个字符  scanf（“%s%s”, str1, str2） 你输入 abc             def会车 str1 是abc str2 是def 中间的那些空格都送给马克思了      char str1[100], str2[100];     scanf("%s%s", str1, str2);     printf("%s\n%s\n", str1, str2); 你可以自己测试测试

user: user-0
content: 引用 6 楼 寻开心的回复:不行 scanf 输入字符串的时候遇到空格自动截断， 过滤掉了。 你可以用gets函数读取一行，这是可以把空格输入进来的， 然后逐个字符去判断空格 好的，我试试，谢谢！

user: user-2
content: 不行 scanf 输入字符串的时候遇到空格自动截断， 过滤掉了。 你可以用gets函数读取一行，这是可以把空格输入进来的， 然后逐个字符去判断空格

user: user-0
content: 引用 3 楼 寻开心 的回复:贴代码出来看才知道 一般说来是陷入死循环或者等待你继续输入的状态才是这样没有反应的  if(a[i]==' ')         {             num=i;             break;         } 我想用这个来表示数据输入的结束，请问可以这样用吗？

user: user-0
content: 引用 3 楼 寻开心 的回复:贴代码出来看才知道 一般说来是陷入死循环或者等待你继续输入的状态才是这样没有反应的  #include<stdio.h> #include<string.h> int main() {     char a[100][10];     int i,k,j,num=0,count=0;     for(i=0;;i++)     {         scanf("%s",a[i]);         if(a[i]==' ')         {             num=i;             break;         }     }     for(i=0;i<num;i++)     {         k=i;         for(j=i+1;j<num;j++)             if(strcmp(a[k],a[j])>0)                 k=j;         if(k!=i)         {             char temp[100];             strcpy(temp,a[k]);             strcpy(a[k],a[i]);             strcpy(a[i],temp);         }     }     for(i=0;;i++)         printf("%s ",a[i]);     return 0; }

user: user-2
content: 贴代码出来看才知道 一般说来是陷入死循环或者等待你继续输入的状态才是这样没有反应的

user: user-0
content: 引用 1 楼 寻开心的回复:弄个数组。char str【1100】； gets读取一行到str中，然后把字符串根据空格拆分出来放到一个数组，对这个数组排序，比较大小用strcmp函数，输出  自己写代码  指针不熟悉，刚好可以用来练习 我的代码总是在输入数据后按回车键却没有输出，请问您知道这是为什么吗？

user: user-2
content: 弄个数组。char str【1100】； gets读取一行到str中，然后把字符串根据空格拆分出来放到一个数组，对这个数组排序，比较大小用strcmp函数，输出  自己写代码  指针不熟悉，刚好可以用来练习