我使用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 );
答案 0 :(得分:1)
str
是指向char
(在这种情况下为char
的数组的指针)的指针,在main
的第一行,您为其分配值“ “ Tom 28”,这会使其指向指向字符串“ Tom 28”,该字符串位于内存中的某个未知位置。
执行str[12] = '5'
时,将写入一个未定义的行为的任意存储位置。在那行代码之后发生的任何事情都可以是任何东西,尝试对其进行解释是没有意义的。您的程序可能崩溃了,您可能覆盖了一个任意变量,从而导致应用程序的行为发生了变化。它取决于许多因素,例如编译器,内存布局,cpu体系结构,操作系统等等。
我不确定您要做什么,但是str[12] = '5'
行是错误的,删除它应该可以解决问题。