可以:
#include <stdio.h> int main(void) { char str[8] = {0}; str[0] = *"jiang"; printf("%s\n", str); return 0; }
输出结果是:
j
2012/5/16 更新
补充一个例子(正确):
#include <iostream> using namespace std; int main(void) { cout << "0123456789"[5] << endl; return 0; }
输出结果是:
5
2012/7/21
1、通过:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstring> using namespace std; int main(int argc, char **argv) { char str[10]; char *p = str; strcpy(p, "wwwww"); cout << p << endl; return 0; }
2、不通过:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstring> using namespace std; int main(int argc, char **argv) { char str[1]; char *p = str; strcpy(p, "w"); //Debug Error: Stack around the variable 'str' was corrupted // "w"占两个字节,而str是一个字节的字符数组 cout << p << endl; return 0; }
这个我感到奇怪,strcpy的第一个参数同样是指针,与第一个程序比较,难道这个p记录的信息还挺多?还扯上str了?还是strcpy本身就要检查?待解答。
3、通过:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstring> using namespace std; int main(int argc, char **argv) { char *p = NULL; p = "aaaaa"; cout << p << endl; return 0; }
"aaaaa"在文字常量区上,注意这里若用
strcpy(p, "aaaaa");
将出现运行时错误(编译通过),非法访问内存区域。