【问题标题】:Storing a character at address location in C在C中的地址位置存储一个字符
【发布时间】:2016-09-22 15:30:03
【问题描述】:

在汇编语言中,如果你有两个变量,地址 a0 和字节 t0,很容易通过键入将 t0 存储在地址 a0 的最开头

sb $t0,0($a0)

现在,我想在 C 中做同样的事情,在这种情况下,我有

char* a0 = "AbC";
char t0 = 'w';

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

【问题讨论】:

  • sb $t0,0($a0) - 我强烈怀疑这是否适用于我编程的架构。所以你的前提已经错了。对于 C 部分,我建议阅读一本好的 C 书籍的指针章节(以及之前的所有章节)。这是基本的东西。
  • 好吧,我使用 MARS 模拟器,它只会在地址超出范围时失败(如果您定义了标签和值,则不会)。

标签: c pointers memory-address


【解决方案1】:

您无法替换 'A',因为它位于字符串文字中,是只读的。

但是,您可以将字符串存储在一个数组中,这使得字母和可访问,然后轻松替换 'A'

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

a0[0] = t0;

【讨论】:

  • 在 C 中,括号必须在标识符之后。
  • @DavidCullen 已修复。
【解决方案2】:

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

char a0[] = "AbC";

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

【讨论】:

  • 这样你也可以用数组表示法访问a0:a0[0] = t0
  • @acornagl,是的,但是当 a0 被声明为 char * 时,您也可以这样做。
  • @JohnBollinger,我同意。
  • @acornagl,那你的意思是什么?您可以使用数组索引表示法并不能将 a0 的声明与 OP 的声明区分开来。
【解决方案3】:

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

但是,您仍然可以使用 char* a0;声明,但你的代码会更复杂

(记得要包含 string.h 库

char* a0  ;
char t0 = 'w';
a0= (char *)malloc (10);
strcpy(a0,"ABC"); 

a0[0]=t0;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多