Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo darle a una matriz una cadena de puntero

Cómo darle a una matriz una cadena de puntero

1. ¿Cómo copiar la cadena a la que apunta el puntero de carácter a una matriz de caracteres?

Si hay char *p y P ya apunta a una matriz de caracteres con 10 elementos, y la matriz de destino existente char b[10], hay tres funciones que pueden copiar la cadena.

1. strcpy

Formato de sintaxis: strcpy (dirección de destino, dirección de origen)

La sintaxis de este ejemplo: strcpy(b, p);

Copie los caracteres después de la dirección de origen a la dirección de destino uno por uno hasta encontrar el terminador. Si la cadena de origen no contiene el terminador, la matriz de destino estará fuera de límites.

2. strncpy

Formato de sintaxis: strncpy (dirección de destino, dirección de origen, longitud de caracteres)

La sintaxis de este ejemplo: strncpy(b, p, 10 );

Copie los primeros n caracteres (longitud de caracteres especificada) de la dirección de origen a la dirección de destino uno por uno, sin detectar terminadores ni límites. Si la longitud especificada es mayor que la longitud de la matriz objetivo, excederá los límites.

3. memcpy

Formato de sintaxis: memcpy (dirección de destino, dirección de origen, longitud en bytes)

La sintaxis de este ejemplo: memcpy (b, p, sizeof(char)* 10);

Copia de bloque de memoria, la más eficiente. Copie el contenido de los primeros n bytes (longitud de caracteres especificada * ancho de datos de caracteres) de la dirección de origen a la dirección de destino uno por uno, ignorando el tipo de elemento de la matriz, copiando solo por bytes y sin detectar los límites de la matriz. Si la longitud especificada es mayor que la longitud de la matriz objetivo, excederá el límite. Lo que hay que tener en cuenta aquí es que la longitud de la matriz debe obtenerse del ancho de los datos (tamaño de (char)) por el tipo de elemento dado, y luego se calcula el tamaño de memoria real.

2. ¿Cómo asignar la cadena a la que apunta el puntero a una matriz?

# incluir & ltstdio.h & gt

# incluir & ltstring.h & gt

char * copystr(const char * s 1, char p1[ 100])

{

int I = 0;

mientras(s1[i]!='\0')

{

p 1[I]= s 1[I];

i++

}

p 1[I]= '\0';

Devuelve p 1;

}

int main()

{

const char *s= "¡Hola! ¿Qué estás haciendo?";

char p[100]

char * q

q =(char; *)s; Esta oración asigna directamente la dirección de S a q.

copystr(s, p); Esta es una función que asigna valores uno por uno

Opción de venta (p);

puts(q) ;

Devuelve 0;

}

3. ¿Cómo copiar la cadena a la que apunta el puntero de caracteres a la matriz de caracteres?

Si hay char *p y P ya apunta a una matriz de caracteres con 10 elementos, y la matriz de destino existente char b[10], hay tres funciones que pueden e 799 ser 5 baa 6 e 58685 e 5 EB 931333966639Copiar cadena.

1. formato de sintaxis strcpy: strcpy (dirección de destino, dirección de origen) Este ejemplo de sintaxis: strcpy (b, p); copie los caracteres después de la dirección de origen a la dirección de destino uno por uno hasta que el terminador sea. encontrado. Si la cadena de origen no contiene el terminador, la matriz de destino estará fuera de los límites. 2. Formato de sintaxis de strncpy: strncpy (dirección de destino, dirección de origen, longitud de caracteres) Este ejemplo de sintaxis: strncpy (b, p, 10); copia los primeros n caracteres (longitud de caracteres especificada) de la dirección de origen a la dirección de destino uno por uno; uno, no detecta terminadores ni límites. Si la longitud especificada es mayor que la longitud de la matriz objetivo, excederá los límites.

Formato de sintaxis 3.memcpy: memcpy (dirección de destino, dirección de origen, longitud en bytes) Este ejemplo de sintaxis: Memcpy (b, p, sizeof (char) * 10 copia del bloque de memoria, la más eficiente); . Copie el contenido de los primeros n bytes (longitud de caracteres especificada * ancho de datos de caracteres) de la dirección de origen a la dirección de destino uno por uno, ignorando el tipo de elemento de la matriz, copiando solo por bytes y sin detectar los límites de la matriz. Si la longitud especificada es mayor que la longitud de la matriz objetivo, excederá el límite.

Lo que hay que tener en cuenta aquí es que la longitud de la matriz se debe obtener a partir del ancho de los datos (sizeof(char)) hasta el tipo de elemento dado, y luego se calcula el tamaño real de la memoria.

4. Si la cadena a la que apunta el puntero está asignada a una matriz en lenguaje C.

Al declarar una matriz, es necesario especificar el tamaño

Puedes usar memcpy, y para cadenas, también puedes usar strcpy o strncpy (se requiere string.h).

Por ejemplo:

char * p = " abc

char a[10];

memcpy(a, p, sizeof ( a )); a )); /* Más seguro que strcpy arriba */

PD: con respecto al tamaño de, al recuperar una matriz, es el tamaño de la matriz. Si el puntero es una máquina de 32 bits, es 4. , por lo que el puntero de cadena no es necesario. sizeof toma la longitud, pero usa strlen();

5. La principal diferencia es la diferencia entre la matriz de punteros y la definición de puntero de matriz. int(* p)[n]; este es un puntero de matriz de alta prioridad (). En primer lugar, significa que P es un puntero a una matriz unidimensional de. enteros. La longitud de esta matriz unidimensional es n, que también se puede decir que es p.

En otras palabras, al ejecutar p+1, P necesita definir int * p [. n] que abarca la longitud de n datos enteros; esta es una matriz de punteros [] wint*h de alta prioridad, primero combinada con p para formar una matriz, y luego una matriz de punteros enteros, con n elementos de matriz de tipo puntero. para ejecutar p+1 aquí, y la asignación también es incorrecta: p = a; porque P es una representación desconocida, entonces solo hay p[0], p[1] y p[2]. >P[n-1], son variables de puntero y se pueden usar para almacenar direcciones de variables como esta * p = a ;Aquí *p representa el valor del primer elemento de la matriz de puntero y el valor de la primera dirección de. un

.