Вы должны создать эмулятор хранилища данных.
Пожалуйста, следуйте инструкциям ниже.
gcloud components install cloud-datastore-emulator
gcloud beta emulators datastore start
oiutput: [хранилище данных] Dev App Server запущен.
подробнее: https://cloud.google.com/datastore/docs/tools/datastore-emulator
sizeof (символ), как гарантируют, будет 1, но sizeof (символ*) не.
Тем не менее, Ваша функция только работает случайно.
Например, попытайтесь назвать его со следующими параметрами:
abc defg
Это уступит:
2 args.
input: a, c,
который является прост неправильный. Проблема - Вы, увеличивают указатель на элемент 1 из argv вместо указателя на argv.
Попробуйте это:
#include <stdio.h>
int main(int argc, char * argv[]){
char **pi;
int i;
pi = argv + 1;
printf("%d args.\n",argc-1);
printf("input: ");
for(i=0;i<argc-1;i++){
printf("%c, ",**pi);
pi++;
}
printf("\n");
return 0;
}
Это распечатает первый символ каждого аргумента:
2 args.
input: a, d,
Если у Вас есть указатель ptr
из типа T*
и Вы добавляете N
, затем указатель будет усовершенствован N * sizeof (*ptr)
или эквивалентный N * sizeof (T)
байты. Вы просто забыли разыменовывать pi
. Таким образом, с чем Вы добрались sizeof (pi)
был sizeof char*
, но не sizeof a char
. Ваша строка была эквивалентна pi+=sizeof(char*)/2;
Указатели на Вашей платформе составляют большие 4 байта. Таким образом в действительности Вы сделали pi+=2;
. Записать pi+=2
если Вы хотите увеличить 2 раза. Отметьте это char
имеет sizeof 1 по определению. Вы не должны делать sizeof (char)
, это всегда 1.
sizeof (пи) возвращает размер (символ*), который является типом пи (указатель, вероятно, два, четыре, или восемь байтов). sizeof (символ) возвратится 1.
Однако другая вещь понять является этим каждый раз, когда Вы увеличиваете указатель числом (например: пи + = sizeof (символ); пи ++; и т.д.), Вы увеличиваете указатель основным размером так или иначе. Так:
int *ipointer = &int_array[0];
ipointer += 2;
на самом деле увеличит ipointer к 2 разам sizeof интервал.
Другая вещь, которую Вы, кажется, делаете неправильно, указывает на пи на первый аргумент и затем цикличное выполнение через все аргументы. Если Вы хотите циклично выполниться через аргументы, попробуйте что-то вроде этого:
for (i = 1; i < argc; i++) {
pi = argv[i];
// ... do something with pi
}