原帖由 lgfang 于 2007-12-27 16:05 发表
你这能编译过?
典型错误。
搞清楚
char* string = "something";
和
char string[] = "something";
的区别就知道为什么出错了。
原帖由 lgfang 于 2007-12-27 16:05 发表
你这能编译过?
典型错误。
搞清楚
char* string = "something";
和
char string[] = "something";
的区别就知道为什么出错了。
原帖由 fallshuang 于 2007-12-27 23:34 发表
不要误导别人,虽然这个代码执行会崩溃,但是编译是绝对可以通过的。 你要搞清楚什么是compiler , 什么是linker and loader 。这个代码之所以崩溃不是因为不符合C99的语义,是因为linker和loader让它崩溃。 ...
原帖由 whyglinux 于 2007-12-29 20:52 发表
>> 这个代码之所以崩溃不是因为不符合C99的语义,是因为linker和loader让它崩溃。
不是这样的。
在程序运行之前,作为静态对象的 "something" 字符串字面量和程序代码已经被 load 进来了。Access violati ...
在程序运行之前,作为静态对象的 "something" 字符串字面量和程序代码已经被 load 进来了。
原帖由 fallshuang 于 2007-12-30 02:30 发表
我哪句话说错了? 你讲清楚点,不要顾左右而言他。
我的意思再明确重说一遍:
static void foo(void)
{
char *str = "aaaaaaa";
printf("%s\n", str);
*str = 'b';
print ...
Snap1.jpg (19.01 KB, 下载次数: 28)
原帖由 scutan 于 2008-1-2 22:08 发表
我真想骂你一句裘千仞.
你真的在2.6内核中试了你那个内核模块吗?
char *str = "aaaa";
*str = 'b';
这个语句能将str[0]的值变为'b'吗?
你试试再说话.
很简单的一个问题, 就是一个进程的地址空间的权 ...
From C99 - 6.4.5 String literals
6 It is unspecified whether these arrays are distinct provided their elements have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.
原帖由 scutan 于 2008-1-2 22:08 发表
我真想骂你一句裘千仞.
你真的在2.6内核中试了你那个内核模块吗?
char *str = "aaaa";
*str = 'b';
这个语句能将str[0]的值变为'b'吗?
你试试再说话.
很简单的一个问题, 就是一个进程的地址空间的权 ...
这个问题其实很简单,就是rodata的权限问题,但是2楼的那位居然说这2句代码编译应该报错,这是不对的。 我主要是反对2楼的观点,但是很多人都不仔细看我说的话。
最好仔细看完别人说的话再发表意见。
原帖由 lgfang 于 2008-1-3 09:55 发表
也不知道你是没有“最好仔细看完别人说的话再发表意见。”,还是故意装作没看见。我已经解释过了我之所以说一楼的例子编译会报错是因为里面用到了未定义的变量 test。当然,这肯定是楼主没有把他的原始代码 ...
原帖由 fallshuang 于 2008-1-3 09:27 发表
你看话请看仔细点,年轻人不要激动。我只说执行那个内核模块不会出错,我没说在缺省的内核配置上
char *str = "aaaa";
*str = 'b';
这个语句能将str[0]的值变为'b!
但是,如果你经常debug ker ...
原帖由 fallshuang 于 2008-1-2 21:40 发表
请把我的话看仔细点, 我说编译链接都不应该有问题
我没说在linux-x86上运行不会有问题!
你知道编译链接和运行有什么区别么? 仔细想想
你执行 gcc a.c 没出任何错,就说明编译链接没有问题。 ...
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |