-1

我有以下代码

#include <stdio.h>
#include<conio.h>
#include <ctype.h>
char *convertire(char *sir)
{
    char *sir2="";
    while (*sir)
    {
        *sir2 = toupper(*sir);
        sir++;
    }
    return (sir2);
}
void main(void)
{
    char *sir = "Home is good";
    char *sir2 = convertire(sir);
    printf("Sirul obtinut este : %s\n", sir2);
    _getch();
}

当我尝试编译时出现以下错误

First-chance exception at 0x00E3141B in pointeri.exe: 0xC0000005: Access violation writing location 0x00E35858. If there is a handler for this exception, the program may be safely continued.

你能帮我解决这个问题吗?

4

2 回答 2

2

您还需要跟踪 的开始sir2,基本上您需要convertire()像这样修改:

char *convertire(char *sir)
{   
    char *p;
    char *sir2=(char *)malloc(strlen(sir)+1);
    p = sir2;
    while (*sir)
      {   
        *sir2++ = toupper(*sir++);
      }
    return p;
}
于 2015-04-14T10:58:40.867 回答
1
char *sir2="";

没有为您的指针分配足够的内存,sir2并且也只是只读的。

你需要类似的东西

char *sir2 = malloc(strlen(sir1) + 1);

访问未分配的内存会导致未定义的行为并可能导致崩溃。除了为指针分配内存之外,这无法以任何其他方式处理。

于 2015-04-14T10:28:16.310 回答