//FILE 1
char *ptr="Sample";
void SomeFunction() {
cout<<ptr<<endl;
}
//FILE 2
void SomeFunction();
int main()
{
extern char ptr[];
SomeFunction();
cout<<ptr<<endl;
}
主函数中的 ptr
是打印一些垃圾值。请让我知道原因。
答案 0 :(得分:3)
ptr
被声明为文件1中的指针,并作为文件2中的数组。指针和数组不是一回事,即使它们的行为有时相似。
确保您的extern
声明与其定义中指定的变量类型相匹配。
答案 1 :(得分:3)
extern char *ptr;
const char*
而不是char *
答案 2 :(得分:1)
如果您编写了与file1.cpp对应的头文件,则可能会遇到char*
与char[]
的问题。
// file1.h
extern char* ptr; // Corresponds to your implementation
// Better:
extern const char * ptr; // Consistent with assignment to a string literal
// Alternative:
extern char ptr[]; // Would require changing implementation in file1 to
// char ptr[] = "Hello world";
你的file2.cpp做得非常糟糕:它正在声明extern
指针本身。永远不要那样做。相反,file2.cpp应该#include
这个新的头文件,应该是file1.cpp 。通过这种方式,您可以找到不一致的内容,例如您遇到的内容。
答案 3 :(得分:0)
char *
和char []
不是一回事。一个是指针,另一个是数组。请参阅C FAQ中的this page。
在File1中更改您的定义,或在File2中更改您的声明。
答案 4 :(得分:0)
我尽量不要忘记一年前学到的一切,所以这就是它应该如何:
请看Let_Me_Be的答案以获得好评。
您的主要功能是打印垃圾,因为您声明的变量与第一个文件中的变量不同。
$ cat print.cpp ;echo ---; cat print2.cpp
#include <stdio.h>
#include <cstdlib>
#include <iostream>
using namespace std;
const char *ptr = "Hello";
void sayLol(){
cout<<ptr<<endl;
}
---
#include <stdio.h>
#include <cstdlib>
#include <iostream>
using namespace std;
void sayLol();
int main(void){
extern char *ptr;
sayLol();
cout<<ptr<<endl;
}