为什么我的tolower调用不执行? char*abc=“abc”; int i; printf(“%s\n”,abc); 对于(i=0;i

为什么我的tolower调用不执行? char*abc=“abc”; int i; printf(“%s\n”,abc); 对于(i=0;i,c,C,我调用tolower的行不执行?char*abc=“abc”定义字符串文字 在运行期间无法更改的内容。 使用charabc[]=“abc” 编辑:在某些情况下,您可能“可以”更改它, 但是没有任何保证。 它可以工作,也可以崩溃, 或者用你的程序做其他奇怪的事情 无法立即识别。abc指向一个常量字符串,因为它是只读的,所以不能直接更改该值。有两种方法。 (1) 您可以在堆栈中分配内存: char * abc = "ABC"; int i; printf("%s\n", abc); for (i

我调用tolower的行不执行?

char*abc=“abc”定义字符串文字
在运行期间无法更改的内容。
使用
charabc[]=“abc”

编辑:在某些情况下,您可能“可以”更改它,
但是没有任何保证。
它可以工作,也可以崩溃,
或者用你的程序做其他奇怪的事情

无法立即识别。

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);
charabc[]=“abc”;
int i;
printf(“%s\n”,abc);
对于(i=0;i
(2) 您还可以在heap中分配内存,代码如下:

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);  
int len=strlen(“ABC”);
char*p=malloc(len+1);
strcpy(p,“ABC”);
printf(“%s\n”,p);
对于(i=0;i
编译时或运行时错误?它是如何表现的、错误消息、意外行为?请更具体地说明“不执行”是什么意思。是否包含了
?“ABC”是一个静态字符串。它们不能被修改(就标准而言)。不要这样做,而是执行strcpy(abc,“abc”)
。您正在尝试在适当的位置修改文本字符串。。。你不能那样做
abc
应该是
const
。我记得过去的糟糕日子,那时情况并非如此;我们用文字做了一些“有趣”的事情。“坏”的意思取决于读者…玩有趣的脏代码是有趣的:D,但不是当你真的希望程序工作可靠时:D
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);