错误程序:
#include
#include
#define M 2
//二维长度为2
#define N 2
int main ()
{
char s[N][M];
int i,j;
for(i=0;i<N;i++)
{
printf("Please input:");
scanf("%s",&s[i]);
}
for(i=0;i<N;i++)
for(j=i;j<M;j++)
if(strcmp(s[i],s[j])>0)
{
char t[M];
strcpy(t,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],t);
}
printf("The result:");
for(i=0;i<N;i++)
printf("%s
",s[i]);
return 0;
}
运行结果:
Please input:12
//输入的字符串长度为2
Please input:24
The result:1224 24
正确程序:
#include
#include
#define M 20
//二维长度为20
#define N 2
int main ()
{
char s[N][M];
int i,j;
for(i=0;i<N;i++)
{
printf("Please input:");
scanf("%s",&s[i]);
}
for(i=0;i<N;i++)
for(j=i;j<M;j++)
if(strcmp(s[i],s[j])>0)
{
char t[M];
strcpy(t,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],t);
}
printf("The result:");
for(i=0;i<N;i++)
printf("%s
",s[i]);
return 0;
}
运行结果:
Please input:24
//输入的字符串长度为2
Please input:12
The result:12 24
结论:字符串存储时,若写入的长度小于已经定义的长度,会自动添加‘/0’,若写入的字符串长度大于或等于已经定义的长度,则不会加‘/0’。输出时,字符串遇到‘/0’时认为这是一段字符串,停止输出,否则则一直输出到结束。所以若要进行二维字符串数组中字符串的操作,定义时,需将第二维的长度定义稍大些。
#include
#include
#define M 2
#define N 2
int main ()
{
}
运行结果:
Please input:12
Please input:24
The result:1224
正确程序:
#include
#include
#define M 20
#define N 2
int main ()
{
}
运行结果:
Please input:24
Please input:12
The result:12
结论:字符串存储时,若写入的长度小于已经定义的长度,会自动添加‘/0’,若写入的字符串长度大于或等于已经定义的长度,则不会加‘/0’。输出时,字符串遇到‘/0’时认为这是一段字符串,停止输出,否则则一直输出到结束。所以若要进行二维字符串数组中字符串的操作,定义时,需将第二维的长度定义稍大些。