当我尝试运行以下代码时,程序崩溃:
#include <string.h>
#include <stdio.h>
typedef char* String;
int main() {
char string1[] = "hello";
void* try = &string1;
String try2 = *(String*)try;
printf("%s ",try2);
}
任何想法为什么?
答案 0 :(得分:2)
String try2 = *(String*)try;
相当于
char* try2 = *(char**)try;
这可能与您的意图相冲突。你应该写
String try2 = try;
或只是
char *try2 = try;
另请注意,强制转换可以隐藏严重问题,因此在不必要时应避免使用它们。
答案 1 :(得分:1)
在您的代码中,
String try2=*(String*)try;
错了。您可以摆脱不必要的(有害的)强制转换(实际上隐藏了不匹配的数据类型的问题)并简单地写
String try2 = try;
答案 2 :(得分:0)
您可以使用
try=&string1[0];
或
try=string1;
答案 3 :(得分:0)
String try2=*(String*)try;
错了。
你可以拥有
String try2=(String)try;
或
String try2=try; // Recommended style, since a void* can be safely cast into any other pointer type.
答案 4 :(得分:0)
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_layout.xsd">
<move element="catalog.leftnav" destination="category.products" after="-"/>
</layout>
的类型是string
,它是char[6]
的数组,你可以将它指向一个字符指针:
char
但char* p = string;
的类型为&string
。它是指向6 char(*)[6]
数组的指针,因此您无法将其分配给char
,char**
是指向char
指针的指针。您需要将其指定给指向6个字符数组的指针:
char (*pa)[6] = &string;
因此你在这里做的演员:
(String*)try;
相当于:
( char**)try
不正确,因为try
表示指向6个char数组的指针,而不是指向char的指针。
指针应该转换为正确的类型,指向6 char的数组的指针:
String* try2 = *( char(*)[6] )try;