char * abc = "ABC";
int i;
printf("%s\n", abc);
for (i = 0; i < strlen(abc); i++)
{
abc[i] = tolower((int) abc[i]); //Error at this line
}
printf("%s\n", abc);
我调用tolower的行不会执行?
答案 0 :(得分:5)
char * abc = "ABC";
定义字符串文字
在运行期间无法更改
使用char abc[] = "ABC";
编辑:在某些情况下,也许你“可以”改变它,
但是没有任何保证
它可以工作,它可能崩溃,
或者用你的程序做其他奇怪的事情
这些都无法立即识别。
答案 1 :(得分:2)
abc指向一个常量字符串,因为它是只读的,所以不能直接更改该值。有两种方法 (1)您可以在堆栈中分配内存:
char abc[] = "ABC";
int i;
printf("%s\n", abc);
for (i = 0; i < strlen(abc); i++)
{
abc[i] = tolower((int) abc[i]); //Error at this line
}
printf("%s\n", abc);
(2)你也可以在堆中分配内存,代码如下:
int len = strlen("ABC");
char *p = malloc(len + 1);
strcpy(p, "ABC");
printf("%s\n", p);
for (i = 0; i < len; i++)
{
p[i] = tolower((int) p[i]); //Error at this line
}
printf("%s\n", p);