#include <stdio.h>
#include<string.h>
#include<malloc.h>
int main()
{
int n,l,t=0,i=0;
char s[200];
scanf(“%d”,&n);
int* ptd[100];
while(i<n)
{
scanf(“%s”,s); //gets(s);
l = strlen(s);
for(t=0;t<l;t++)
{
if(“A”<=s[t]&&s[t]<“Z”)
s[t] = s[t]+32;
else if(“a”<=s[t]&&s[t]<“z”)
s[t] = s[t]-32;
}
ptd[i]=”s”;
i++;
}
for(t=0;t<n;t++)
printf(“%s”,*ptd[t]);
return 0;
}
#include<string.h>
#include<malloc.h>
int main()
{
int n,l,t=0,i=0;
char s[200];
scanf(“%d”,&n);
int* ptd[100];
while(i<n)
{
scanf(“%s”,s); //gets(s);
l = strlen(s);
for(t=0;t<l;t++)
{
if(“A”<=s[t]&&s[t]<“Z”)
s[t] = s[t]+32;
else if(“a”<=s[t]&&s[t]<“z”)
s[t] = s[t]-32;
}
ptd[i]=”s”;
i++;
}
for(t=0;t<n;t++)
printf(“%s”,*ptd[t]);
return 0;
}
解决方案
10
#include <stdio.h>
#include<string.h>
#include<malloc.h>
int main()
{
int n,l,t=0,i=0;
char s[200];
scanf(“%d”,&n);
int* ptd[100];//这是个指针数组,你没给出具体的空间,就是说没初始化,可以写 int ptd[100][200];
while(i<n)
{
scanf(“%s”,s); //gets(s);
l = strlen(s);
for(t=0;t<l;t++)
{
if(“A”<=s[t]&&s[t]<“Z”)
s[t] = s[t]+32;
else if(“a”<=s[t]&&s[t]<“z”)
s[t] = s[t]-32;
}
ptd[i]=”s”;//这里你他们赋值了。
i++;
}
for(t=0;t<n;t++)
printf(“%s”,*ptd[t]);
return 0;
}
#include<string.h>
#include<malloc.h>
int main()
{
int n,l,t=0,i=0;
char s[200];
scanf(“%d”,&n);
int* ptd[100];//这是个指针数组,你没给出具体的空间,就是说没初始化,可以写 int ptd[100][200];
while(i<n)
{
scanf(“%s”,s); //gets(s);
l = strlen(s);
for(t=0;t<l;t++)
{
if(“A”<=s[t]&&s[t]<“Z”)
s[t] = s[t]+32;
else if(“a”<=s[t]&&s[t]<“z”)
s[t] = s[t]-32;
}
ptd[i]=”s”;//这里你他们赋值了。
i++;
}
for(t=0;t<n;t++)
printf(“%s”,*ptd[t]);
return 0;
}
10
楼上正解你使用了一个 指针数组,然后给指针进行了赋值,类型是从char转换成int* 这里都三符合语法的,但是你*ptd[t]这里对一个非法地址进行*操作,是不可以的
10
33 #include <stdio.h>
32 #include<string.h>
31 #include<malloc.h>
30 int main()
29 {
28 int n, l, t=0, i=0;
27 char s[200];
26 scanf("%d",&n);
25 char *ptd[100]; //here you should use char for the follow using
24
23 while(i < n && i < 100) //the value could not cross the value of 100
22 {
21 | scanf("%s",s); //gets(s);
20 | l = strlen(s);
19 | for(t = 0; t < l; t++)
18 | {
17 | | if("A" <= s[t] && s[t] <= "Z") //include capital "Z"
16 | | | s[t] = s[t]+32;
15 | | else if("a" <= s[t] && s[t] <= "z") //include lowercase letter "z"
14 | | | s[t] = s[t]-32;
13 | }
>> 12 | ptd[i] = malloc(sizeof(128));
11 | if (NULL == ptd[i]) {
10 | | fprintf(stderr, "malloc error!\n");
9 | | return -1;
8 | }
7 | //ptd[i] = s; //pointer the first address of the string called s
6 | memcpy(ptd[i], s, l+1);
5 | i++;
4 }
3 for(t = 0; t < n; t++)
2 | printf("%s\n", ptd[t]); //here use the address because the format %s
1 return 0;
34 }
~
10
由于本人也是菜鸟,不太清楚题主这段程序的实现功能。所以将题主的程序作了点修改,仅供题主参考:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
int main()
{
int n,l,t=0,i=0;
char s[200];
char* ptd[100];
scanf("%d",&n);
for (t=0; t<100; t++)
ptd[i] = (char *)malloc(100 * sizeof(char));
while(i<n)
{
scanf("%s",s);
l = strlen(s);
for(t=0;t<l;t++)
{
if("A"<=s[t]&&s[t]<"Z")
s[t] = s[t]+32;
else if("a"<=s[t]&&s[t]<"z")
s[t] = s[t]-32;
}
ptd[i]=s;
printf("ptd[%d] = [%s]\n",i,ptd[i]);
i++;
memset(s, 0x00, sizeof(s));
}
for (t=0; t<100; t++)
free(ptd[i]);
return 0;
}