Другое решение, если кто-то получает ошибку Указанный пароль для учетной записи пользователя «root» недействителен или не удалось подключиться к серверу базы данных также с правильным паролем, это следовать за
• В реестре Windows удалите ключ реестра mysql_pwd в разделе HKCU \ Software \ Microsoft \ WebPlatformInstaller
• Unistall более старая версия соединителя MySQL .NET
• Загрузите и установите последний MySql .NET Connector .
sizeof(array)
реализован полностью компилятором C. К тому времени, когда программа связана, что похоже sizeof()
, вызов Вам был преобразован в константу.
Пример: когда Вы компилируете этот код C:
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char** argv) {
int a[33];
printf("%d\n", sizeof(a));
}
Вы добираетесь
.file "sz.c"
.section .rodata
.LC0:
.string "%d\n"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $164, %esp
movl $132, 4(%esp)
movl $.LC0, (%esp)
call printf
addl $164, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 (Gentoo 4.1.2 p1.1)"
.section .note.GNU-stack,"",@progbits
$132
в середине, размер массива, 132 = 4 * 33. Заметьте, что нет никакого call sizeof
инструкция - в отличие от этого printf
, который является реальной функцией.
sizeof (Массив) ищется во время компиляции, не во время выполнения. Информация не хранится.
Вы, возможно, Интересуются реализацией проверки границ? Если так, существует много различных способов пойти об этом.
sizeof
дает размер переменной, не размер объекта, на который Вы указываете (если существует тот.) sizeof(arrayVar)
возвратит размер массива в байтах, если и только если arrayVar
объявляется в объеме как массив и не указатель.
, Например:
char myArray[10];
char* myPtr = myArray;
printf("%d\n", sizeof(myArray)) // prints 10
printf("%d\n", sizeof(myPtr)); // prints 4 (on a 32-bit machine)
ng-model
и contenteditable
, каким образом тогда Вы говорите, что у них есть два различных объема? Это похоже на противоречие. Или я пропускаю что-то?
– Behrang
13 January 2014 в 12:20
sizeof()
будет только работать на массив фиксированного размера (который может быть статичным, базирующийся стек или в структуре).
при применении его к массиву, созданному с malloc
(или новый в C++) Вы будете всегда получать размер указателя.
И да, это основано на информации о времени компиляции.
sizeof является чистым временем компиляции в C++ и C до C99. При запуске с C99 существуют массивы переменной длины:
// returns n + 3
int f(int n) {
char v[n + 3];
// not purely a compile time construct anymore
return sizeof v;
}
, Который оценит sizeof
операнд, потому что n
еще не известен во время компиляции. То, что только относятся к массивам переменной длины: Другие операнды или типы все еще заставляют sizeof вычислить во время компиляции. В частности, массивы с размерами, известными во время компиляции, все еще обрабатываются как в C++ и C89. Как следствие значение, возвращенное sizeof
, не является временем компиляции, постоянным (константное выражение) больше. Вы не можете использовать его, где такое значение требуется - например, при инициализации статических переменных, если компилятор, который определенное расширение позволяет ему (Стандарт C позволяет реализации иметь расширения того, что это рассматривает как постоянное).