user-0 提问: C语言 新人求助指针问题！

回复:
user: user-0
content: 引用 8 楼 u012620726 的回复:[quote=引用 6 楼 u012388912 的回复:] [quote=引用 2 楼 max_min_ 的回复:] 1 定义的常量指针数组，内容不可改，只可读！所以会引起内存会出错 2 里面的判断if条件不是并列关系，而是if elseif关系 ，不然换了以后，又会换回来的！  已经修改代码中的bug 看看  #include <stdlib.h> #include<stdio.h> int main() {     char *t;      int i;     char p[3][10]={"AbcDEfG","hIJKlmN","ZyxWVu"};     for(i=0;i<3;i++)     {            puts(p[i]);         for(t = p[i];*t !='\0'; t++)         {                if(*t >= 'A' && *t<= 'Z')             {                    *t=(*t) +32;             }                else if(*t>= 'a' && *t<='z')             {                    *t=(*t) - 32;              }            }            puts(p[i]);     }        return 0; }     题目说是指针数组定义3个字符串,, 请问下 如果原先只定义了char *p[3]; 接下来让用户输入字符串，该怎么让指针指向字符串呢? 如果scanf("%s",&p[0]); 直接这样不行啊。。[/quote]在定义个字符串，然后strcpy可以不？[/quote] 应该不怎么好吧……

user: user-1
content: char p[3][20]={"AbcDEfG","hIJKlmN","ZyxWVu"}； char *p[3]={"AbcDEfG","hIJKlmN","ZyxWVu"}; 好好理解下这两种定义的区别  变量的存储区域： 常量区 静态区 栈区 堆区 懂得各种变量的存储区域及各个区域的不同就自己会解决了

user: user-2
content: 引用 2 楼 max_min_ 的回复:1 定义的常量指针数组，内容不可改，只可读！所以会引起内存会出错 2 里面的判断if条件不是并列关系，而是if elseif关系 ，不然换了以后，又会换回来的！  已经修改代码中的bug 看看  #include <stdlib.h> #include<stdio.h> int main() {     char *t;      int i;     char p[3][10]={"AbcDEfG","hIJKlmN","ZyxWVu"};     for(i=0;i<3;i++)     {            puts(p[i]);         for(t = p[i];*t !='\0'; t++)         {                if(*t >= 'A' && *t<= 'Z')             {                    *t=(*t) +32;             }                else if(*t>= 'a' && *t<='z')             {                    *t=(*t) - 32;              }            }            puts(p[i]);     }        return 0; }     嗯

user: user-3
content: 引用 6 楼 u012388912 的回复:[quote=引用 2 楼 max_min_ 的回复:] 1 定义的常量指针数组，内容不可改，只可读！所以会引起内存会出错 2 里面的判断if条件不是并列关系，而是if elseif关系 ，不然换了以后，又会换回来的！  已经修改代码中的bug 看看  #include <stdlib.h> #include<stdio.h> int main() {     char *t;      int i;     char p[3][10]={"AbcDEfG","hIJKlmN","ZyxWVu"};     for(i=0;i<3;i++)     {            puts(p[i]);         for(t = p[i];*t !='\0'; t++)         {                if(*t >= 'A' && *t<= 'Z')             {                    *t=(*t) +32;             }                else if(*t>= 'a' && *t<='z')             {                    *t=(*t) - 32;              }            }            puts(p[i]);     }        return 0; }     题目说是指针数组定义3个字符串,, 请问下 如果原先只定义了char *p[3]; 接下来让用户输入字符串，该怎么让指针指向字符串呢? 如果scanf("%s",&p[0]); 直接这样不行啊。。[/quote]在定义个字符串，然后strcpy可以不？

user: user-4
content: 引用 6 楼 u012388912 的回复:[quote=引用 2 楼 max_min_ 的回复:] 1 定义的常量指针数组，内容不可改，只可读！所以会引起内存会出错 2 里面的判断if条件不是并列关系，而是if elseif关系 ，不然换了以后，又会换回来的！  已经修改代码中的bug 看看  #include <stdlib.h> #include<stdio.h> int main() {     char *t;      int i;     char p[3][10]={"AbcDEfG","hIJKlmN","ZyxWVu"};     for(i=0;i<3;i++)     {            puts(p[i]);         for(t = p[i];*t !='\0'; t++)         {                if(*t >= 'A' && *t<= 'Z')             {                    *t=(*t) +32;             }                else if(*t>= 'a' && *t<='z')             {                    *t=(*t) - 32;              }            }            puts(p[i]);     }        return 0; }     题目说是指针数组定义3个字符串,, 请问下 如果原先只定义了char *p[3]; 接下来让用户输入字符串，该怎么让指针指向字符串呢? 如果scanf("%s",&p[0]); 直接这样不行啊。。[/quote] 不是，没有给每指针分配内存空间  for(int i =0 ; i < 3; i++) {     p[i] = (char *)malloc(sizeof(char) * 36); //每个指针分配36个空间     scanf("%s", p[i]); //不需要取地址，它本身就是首地址！

user: user-0
content: 引用 2 楼 max_min_ 的回复:1 定义的常量指针数组，内容不可改，只可读！所以会引起内存会出错 2 里面的判断if条件不是并列关系，而是if elseif关系 ，不然换了以后，又会换回来的！  已经修改代码中的bug 看看  #include <stdlib.h> #include<stdio.h> int main() {     char *t;      int i;     char p[3][10]={"AbcDEfG","hIJKlmN","ZyxWVu"};     for(i=0;i<3;i++)     {            puts(p[i]);         for(t = p[i];*t !='\0'; t++)         {                if(*t >= 'A' && *t<= 'Z')             {                    *t=(*t) +32;             }                else if(*t>= 'a' && *t<='z')             {                    *t=(*t) - 32;              }            }            puts(p[i]);     }        return 0; }     题目说是指针数组定义3个字符串,, 请问下 如果原先只定义了char *p[3]; 接下来让用户输入字符串，该怎么让指针指向字符串呢? 如果scanf("%s",&p[0]); 直接这样不行啊。。

user: user-5
content: 字符串常量存放在只读数据段，所以不可以修改的。

user: user-4
content: 1 定义的常量指针数组，内容不可改，只可读！所以会引起内存会出错 2 里面的判断if条件不是并列关系，而是if elseif关系 ，不然换了以后，又会换回来的！  已经修改代码中的bug 看看  #include <stdlib.h> #include<stdio.h> int main() {     char *t;      int i;     char p[3][10]={"AbcDEfG","hIJKlmN","ZyxWVu"};     for(i=0;i<3;i++)     {            puts(p[i]);         for(t = p[i];*t !='\0'; t++)         {                if(*t >= 'A' && *t<= 'Z')             {                    *t=(*t) +32;             }                else if(*t>= 'a' && *t<='z')             {                    *t=(*t) - 32;              }            }            puts(p[i]);     }        return 0; }

user: user-6
content: 改为char p[3][20]={"AbcDEfG","hIJKlmN","ZyxWVu"};即可； char *p[3]={"AbcDEfG","hIJKlmN","ZyxWVu"};会成为常量指针，其内容不允许被修改。  引用 楼主 u012388912 的回复://题目:用指针数组方式定义3个字符串,然后遍历个字符串,把里面的小写字母改 大写,大写字母改小写。  //编译环境:C-Free 5.0 #include<stdio.h> int main() { 	char *t;  	int i; 	char *p[3]={"AbcDEfG","hIJKlmN","ZyxWVu"}; 	for(i=0;i<3;i++) 	{ 	   for(t=p[i];*t!='\0';t++) 	   { 	     if(*t>='A'&&*t<='Z') 	     *t=*t+32; 	     if(*t>='a'&&*t<='z') 	     *t=*t-32; 	   } 	   puts(p[0]); 	   puts(p[1]); 	   puts(p[2]);     }  }	    一点运行就停止工作了。。找了很久不知道哪错了， 请教各位高手！谢谢！