Вы можете использовать оператор &
. Вот исходный код:
#include<stdio.h>
#include<stdlib.h>
int main(){
int a[10];
int *p;
printf("%p\n", (void *)a);
printf("%p\n", (void *)(&a+1));
printf("---- diff----\n");
printf("%zu\n", sizeof(a[0]));
printf("The size of array a is %zu\n", ((char *)(&a+1)-(char *)a)/(sizeof(a[0])));
return 0;
};
Вот пример вывода
1549216672
1549216712
---- diff----
4
The size of array a is 10
Неразумно использовать относительное имя пути для файла. Рабочая директория вашей программы может измениться, и тогда файл не будет найден. Создайте абсолютное имя пути к файлу следующим образом:
public static string GetAbsolutePath(string filename) {
string dir = System.IO.Path.GetDirectoryName(Application.StartupPath);
return System.IO.Path.Combine(dir, filename);
}
Использование:
string[] lines= File.ReadLines(GetAbsolutePath(@"mylibrary\airports.txt"));
Чтобы System.Environment.CurrentDirectory
работал, вам нужно иметь "airports.txt"
файл в директории bin\release или bin\debug (в зависимости от того, какой у вас buid) при запуске из VS.
Два варианта, использующие расположение сборки, не будут работать, потому что расположение включает имя сборки, поэтому оно содержит не только путь.
Означает ли это, что в MyLibrary есть файл под названием airports.txt
?
Если да, то вам нужно убедиться, что этот файл включен в вывод сборки. Щелкните правой кнопкой мыши на файле в Visual Studio и выберите Properties. В окне Properties есть свойство Copy to Output Directory
, которое можно установить в Copy Always
, и у вас больше не будет проблем.
Каждый из приведенных вами способов предполагает, что файл "airports.txt" находится в той же папке, что и ваш исполняемый файл. Обратите внимание, что по умолчанию в Visual Studio отладочная версия вашего исполняемого файла (которая используется при отладке) находится в bin\Debug, а релизная версия, которую вы предоставите своим пользователям, находится в bin\Release.