#include
#include
#include
#include
char* convertandmerge (char a[][20])
{
char *p=(char*)malloc(sizeof(char)*40);
p=strcat(a[0],a[1]);
for(;*p!='\0';p++)
{
if(*p>='a'&&*p<='z')
*p=toupper(*p);
else if(*p>='A'&&*p<='Z')
*p=tolower(*p);
}
return p;
}
int main (void)
{
char words[2][20]={"Welcome to China","Happy Birthday 2022"};
char *str=convertandmerge(words);
printf("%s",str);
free(str);
}
为什么我函数里插入了一段大小写转换的for循环整个程序就跑不起来了呢?应该如何改呢?求指正,谢谢。
返回的p指针已经指向字符串的最后了,打印输出不了内容,源数据指针、for循环偏移的指针,需要两个,改进如下:
char* convertandmerge (char a[][20])
{
char *q=(char*)malloc(sizeof(char)*40);
q=strcat(a[0],a[1]);
for(char *p=q;*p!='\0';p++)
{
if(*p>='a'&&*p<='z')
*p=toupper(*p);
else if(*p>='A'&&*p<='Z')
*p=tolower(*p);
}
printf("==== %s\n", q);
return q;
}
内存溢出了。strcat函数返回的指针是第一个参数,不是新分配的内存,所以for循环的时候超过20就溢出了