如果您说出您正在尝试做的事情以便其他人能够正确看待您的代码,那可能会很棒。
现在你似乎还没有很好地理解指针是如何工作的。由于您的代码不是很容易阅读,因此答案将是一般性的。
指针“持有”指向内存的地址。如果你有ptr1指向内存块的A指针和指向ptr2的指针ptr1,如果你改变了ptr1,自然ptr2会经历同样的变化。在您的第一个代码块中,您似乎不明白为什么someVar更改后otherVar更改。为了更明确地指出@dmp 所指出的,您已经告诉您程序(操作系统正在为您的程序管理内存)someVar将指向otherVar[0]. 现在,当otherVar[0]更改时,someVar将会更改,因为指针应该是这样工作的,它被称为取消引用指针 - 当您请求指针指向的值时 - 您会注意到事情发生了变化 prptr2. 因此,请再次阅读有关指针的内容。
在您的第二个代码块中,我不知道您要完成什么,但无论它是什么,它都会SEGFAULT。之所以如此,是因为您还没有理解指针、数组之间的关系以及动态内存分配的工作原理。例如,在splittext函数中你有这一行:
wchar_t *arr[2],*loc = wcsstr(stri, del), buf[DEFAULT_BUFLEN];
就在那里:您告诉操作系统*arr在您尚未为其分配内存的情况下检查第三个单元格的值。此外,在分配内存时,请记住:
- 如果要分配内存
char以获取字符串,则指针必须是指向char如下的指针:
char* my_string = malloc( 256*sizeof(char))
现在你想将内存分配给指向类型变量的指针FILE*。如果你写FILE** my_files = malloc( NUMBER_OF_FILES*sizeof(FILE))它会给你带来麻烦。而是写:
FILE** my_files = malloc( NUMBER_OF_FILES*sizeof(FILE*))
这与您如何为 say 分配内存有关arr。
- 也不要强制转换的返回值
malloc。它将隐藏编译器可能捕获的许多错误!
总而言之,首先尝试了解指针,然后再进一步了解指针、数组和内存分配的高级用法;其次,您不能输入不正确的代码(您会知道它不正确,要么它不编译,要么只是崩溃)并告诉其他人:“嘿,看看那个变量,这就是我的问题所在。” 尝试对问题进行更多研究,尝试了解哪些工具可以提供帮助——在这种情况下是调试器——这将提高你的问题的质量。第三也是最后一点,如果英语不是您的第一语言,您可以提及它,其他人将愿意协助您重新提出问题。
希望下次你会做得更好!
更新
OP编辑后,现在的问题更清楚了,OP的问题是关于指针的。
dd的值发生变化,因为:
aaa是这样的指针:char aaa[500]相当于char* aaa = malloc(500*sizeof(char)). 现在,当dd=aaa您告诉编译器dd将指向相同的内存地址时aaa。因此,每次修改aaa dd都会被修改,因为它们指向内存中的相同内容。
如果不清楚,请尝试重新阅读指针的定义。