再谈字符串的定义,你有没有这样试过?
对于用 char *p="China" 这样定义的字符串。教材中说,把字符串常量的首地址赋给p(教材中使用的编译器为Turbo C 2.0).而且我们大多数人认为这样定义后,字符串常量“China"的什不能修改。
那么请大家看下面的程序。
main()
{char *str;
str="thank you";
printf("the address of cosnt \"thank you \" is %p\n",str); /* 输出 字符串常量thank you的地址 */
printf("Enter your string:\n");
scanf("%s",str);
printf(" the address of const %s is %p",str,str);
getch();
}
{char *str;
str="thank you";
printf("the address of cosnt \"thank you \" is %p\n",str); /* 输出 字符串常量thank you的地址 */
printf("Enter your string:\n");
scanf("%s",str);
printf(" the address of const %s is %p",str,str);
getch();
}
程序运行结果为:the address of cosnt "thank you is 0840:0094
the address of cosnt " 输入的内容 " is 10840:0094
这不就是说明原来的字符常量thank you被输入的内容覆盖了吗?,因而实现的字符常量的修改。
如果要考察"thank you "是否还在内存中,可以在程序的开始用另一个指针变量p也指向"thank you",在程序的最后输出
p指向的内容,如果p指向的内容仍为"thank you "说明字符串常量"thank you "没有被修改;若p指向的内容为在程序运行时输入的内容说明字符常量"thank you "被修改
main()
{char *str,*p;
p= str="thank you";
printf("the address of cosnt \"thank you \" is %p\n\n\n\n",str); /* 输出 字符串常量thank you的地址 */
printf("Enter your string:\n");
scanf("%s",str);
printf("\n\n\nthe address of const %s is %p\n\n\n",str,str);
printf("*p=%s",p);
getch();
}
{char *str,*p;
p= str="thank you";
printf("the address of cosnt \"thank you \" is %p\n\n\n\n",str); /* 输出 字符串常量thank you的地址 */
printf("Enter your string:\n");
scanf("%s",str);
printf("\n\n\nthe address of const %s is %p\n\n\n",str,str);
printf("*p=%s",p);
getch();
}
本人使用的编译器为MyTC v5.2
[此贴子已经被作者于2006-5-6 14:40:17编辑过]