La diferencia entre strcpy(Led_Buf, "12345678"); y uchar Led_Buf[8]={1, 2, 3, 4, 5, 6, 7, 8}; ¡Por favor tenga cuidado!
Supongamos que su código es el siguiente:
uchar?*Buff1
Buff1=(uchar*)malloc(10);
strcpy(Buff1, "12345678");
uchar?Buff2[8]={1, 2, 3.4, 5, 6, 7, 8};
De un dato perspectiva Veámoslo: Buff1 es una cadena estándar, en la que "1" es el carácter Ascii 1, su valor real es 49 y el final es 0, por lo que los datos de 10 bytes de Buff1 son
Los datos son válidos En términos de rendimiento, Buff2 es una matriz de bytes sin firmar compuesta por 8 bytes, y sus 8 bytes de datos son 1, 2, 3, 4, 5, 6, 7, 8 en orden.
En términos de validez de los datos, Buff1 aquí se asigna desde el espacio del montón del proceso a través de malloc. Debe administrar la memoria de forma independiente. Por supuesto, también puede cambiarle el nombre a Buff1 [10] asignado desde el espacio de la pila. Memoria, en resumen, strcpy puede operar tanto la memoria del montón como la de la pila. La definición de buff2 está inicializada y solo se puede usar al definir variables, por lo que no se puede escribir como: uchar?Buff2[8]; Buff2={1, 2, 3, 4, 5, 6, 7, 8};; Y este uso solo puede asignar memoria en el espacio de la pila. (Es mejor mirar la memoria del proceso usted mismo.)
Desde el punto de vista de la posibilidad de error: un posible error con Buff1 es que Buff1 no haya asignado suficiente memoria. Strcpy no evitará ningún error por usted, simplemente comenzará a asignar valores desde la ubicación geográfica señalada por Buff1. Si no se asigna suficiente memoria para Buff1, obtendrá un posible error de memoria "Buff2". puede olvidar la tabla Ascii y confunde el carácter '5' (el número 53) con el número 5
Si necesitas que Buff2 sea una cadena estándar y tenga el mismo valor que Buff1, puedes escribirlo así
uchar ?Buff2[]={'1', '2', '3', '4', '5', '6', '7', '8', 0 };