Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中的地址位置存储字符_C_Pointers_Memory Address - Fatal编程技术网

在C中的地址位置存储字符

在C中的地址位置存储字符,c,pointers,memory-address,C,Pointers,Memory Address,在汇编语言中,如果您有两个变量,地址a0和字节t0,则可以通过键入 sb $t0,0($a0) 现在,我想在C中做同样的事情,在这个例子中,我得到 char* a0 = "AbC"; char t0 = 'w'; 我知道我无法直接访问和修改a0[0],因为这会导致严重的访问错误。用t0中的值替换a0中开头的“A”最有效的方法是什么?“AbC”在只读内存中分配。您希望它位于读/写内存中。为此,请使用 char a0[] = "AbC"; 现在您有了一个可以修改的数组if字符(您有一个指向只读

在汇编语言中,如果您有两个变量,地址a0和字节t0,则可以通过键入

sb $t0,0($a0)
现在,我想在C中做同样的事情,在这个例子中,我得到

char* a0 = "AbC";
char t0 = 'w';
我知道我无法直接访问和修改a0[0],因为这会导致严重的访问错误。用t0中的值替换a0中开头的“A”最有效的方法是什么?

“AbC”
在只读内存中分配。您希望它位于读/写内存中。为此,请使用

char a0[] = "AbC";

现在您有了一个可以修改的数组if字符(您有一个指向只读字符串的指针)。

您不能替换
'a'
,因为它是只读字符串文本

但是,您可以将字符串存储在数组中,这样可以方便地访问字母和,然后替换
'A'

char a0[] = "AbC";
char t0 = 'w';

a0[0] = t0;

基本上,当使用char*a0=“ABC”语句时,a0只是一个指针,指向无法更改的只读内存

但是,您仍然可以使用char*a0;语句,但您的代码将更易于编译

(请记住包括string.h库


在C中,括号必须在标识符之后。@DavidCullen已修复。这样,您也可以使用数组表示法访问a0:a0[0] = t0@acornagl,是的,但是当
a0
被声明为
char*
@JohnBollinger时,你也可以这样做,我同意。@acornagl,那么你的观点是什么?你可以使用数组索引符号,它不会将
a0
的声明与OP的声明区分开来。
sb$t0,0($a0)
-我强烈怀疑这是否适用于我编写的架构。因此,你的前提已经错了。对于C部分,我建议阅读一本好的C语言书中的指针章节(以及之前的所有章节)。这是基本内容。我使用火星模拟器,只有当地址超出范围时才会失败(如果定义了标签和值,则不是这样)。
char* a0  ;
char t0 = 'w';
a0= (char *)malloc (10);
strcpy(a0,"ABC"); 

a0[0]=t0;