从非常量char *数组读取

时间:2019-07-19 13:22:00

标签: c

我使用gcc TDM 64bit编译了以下代码

#include <stdlib.h>
#include <stdio.h>

int main()
{
    char *str = "Tom 28";
    char name[10];
    int age, ret;

    printf("str= %s\n", str);
    ret = sscanf(str, "%s %d", name, &age);
    printf("Name: %s\n", name);
    printf("Age: %d\n", age);

    str[4] = '5';

    printf("str= %s\n", str);
    ret = sscanf(str, "%s %d", name, &age);
    printf("Name: %s\n", name);
    printf("Age: %d\n", age);

    exit( 0 );
}

为什么更改str [12]后没有输出。这是输出

str= Tom 28
Name: Tom
Age: 28

仅空白行。我的目标是从动态分配的char数组中读取

long long len = 10;
char* s = malloc( sizeof(*s) * len );

1 个答案:

答案 0 :(得分:1)

str是指向char(在这种情况下为char的数组的指针)的指针,在main的第一行,您为其分配值“ “ Tom 28”,这会使其指向指向字符串“ Tom 28”,该字符串位于内存中的某个未知位置。

执行str[12] = '5'时,将写入一个未定义的行为的任意存储位置。在那行代码之后发生的任何事情都可以是任何东西,尝试对其进行解释是没有意义的。您的程序可能崩溃了,您可能覆盖了一个任意变量,从而导致应用程序的行为发生了变化。它取决于许多因素,例如编译器,内存布局,cpu体系结构,操作系统等等。

我不确定您要做什么,但是str[12] = '5'行是错误的,删除它应该可以解决问题。