Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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
Macos strcpy-anamoly,粗劣的行为 #包括 int main() { char*s; strcpy(s,“asdqw”); strcpy(s,s+2); 返回0; }_Macos_Strcpy - Fatal编程技术网

Macos strcpy-anamoly,粗劣的行为 #包括 int main() { char*s; strcpy(s,“asdqw”); strcpy(s,s+2); 返回0; }

Macos strcpy-anamoly,粗劣的行为 #包括 int main() { char*s; strcpy(s,“asdqw”); strcpy(s,s+2); 返回0; },macos,strcpy,Macos,Strcpy,这个程序在linux系统中运行时没有显示任何错误,运行正常。 但当在mac osx中运行时,它会显示中止陷阱:6。 为什么会发生这种情况?您必须将内存分配给s。像这样: #include<string.h> int main() { char *s; strcpy(s,"asdqw"); strcpy(s,s+2); return 0; } 否则,将导致未定义的行为。由于行为是未定义的,在Linux上工作和不在OSX上工作都是合理的 此外,正

这个程序在linux系统中运行时没有显示任何错误,运行正常。 但当在mac osx中运行时,它会显示中止陷阱:6
为什么会发生这种情况?

您必须将内存分配给
s
。像这样:

#include<string.h>
int main()
{
     char *s;
     strcpy(s,"asdqw");
     strcpy(s,s+2);
     return 0;
}
否则,将导致未定义的行为。由于行为是未定义的,在Linux上工作和不在OSX上工作都是合理的

此外,正如@Florian Zwoch明智地指出的那样,第二个strcpy()操作在重叠的内存区域上,这再次调用了未定义的行为。这是因为strcpy()不允许内存区域重叠。您可能需要使用
memmove(s,s+2,sizeof(s+2)),允许目标和源重叠。

您可以在Linux上运行“Valgrind”,查看是否存在内存错误

这是一个如何使用它的简单教程


因为这可能是内存问题。

此外,第二个strcpy在重叠的内存区域上工作。这个行为是未定义的。你说的@sun在这里不是问题,它仍然会出现同样的错误。这清楚地解释了重叠内存问题。@aswinmythili
malloc()
不是这里唯一的问题。缺少
malloc()
和使用
strcpy()
都是错误的。
char *s = malloc(100);