【发布时间】:2018-03-10 04:10:12
【问题描述】:
所以我试图反转一个字符串,但我遇到了内存错误。 s 和 s1 的内存已初始化到足以容纳“/0”字符。
有趣的是,如果我删除 *s=*s1 并打印 s1 而不是程序可以工作。 但是我什至没有在 s1 末尾设置“\0”字符,所以它怎么知道在哪里停止打印?
在下面的案例中,究竟是什么问题?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(void)
{
char *s = "abcdefghijklmnop", *s1=malloc(17);
int i;
for(i=0;i<strlen(s);i++)
{
*(s1+i) = *(s+strlen(s)-1-i);
}
*s=*s1;
printf("%s",s);
}
【问题讨论】:
-
你觉得
*s = *s1和s = s1的区别是什么? -
前者把s1指向的值放到s指向的地址里,后者把s指向s1指向的地址
-
@ScottHunter:好的,我明白为什么应该这样了。但是 *s = *s1 有什么问题
-
您无法写入与 *s 关联的内存。
-
每当您想为某个指针
p和索引i写*(p + i)时,只需写p[i]。它更容易阅读,并且含义完全相同。
标签: c string pointers memory malloc