Массив символов C *

#c

Вопрос:

Когда я создаю что-то вроде

 char* t = new char[44];
t = strcpy(s,t);
 

затем strlen(t); верните некоторые неправильные результаты. как я могу это изменить?

Ответ №1:

И strcpy то, и другое, и strlen ожидайте найти специальный символ NUL или '' в массиве. Неинициализированный массив, такой как созданный вами, может содержать вообще что угодно, что означает, что поведение вашей программы не определено, когда она передается в strcpy качестве исходного аргумента.

Предполагая , что цель состояла в том, чтобы скопировать s в t , чтобы заставить программу вести себя так, как ожидалось, попробуйте это:

 #include <iostream>
#include <cstring>
int main()
{
    const char* s = "test string";
    char* t = new char[44];
//  std::strcpy(t, s); // t is the destination, s is the source!
    std::strncpy(t, s, 44); // you know the size of the target, use it
    std::cout << "length of the C-string in t is " << std::strlen(t) << 'n';
    delete[] t;
}
 

Но имейте в виду, что в C строки обрабатываются как объекты типа std::string .

 #include <iostream>
#include <string>
int main()
{
    const std::string s = "test string";
    std::string t = s;
    std::cout << "length of the string in t is " << t.size() << 'n';
}
 

Ответ №2:

Что ты пытаешься сделать? Вы хотите скопировать с s на t ? Если это так, аргументы в strcpy обратном порядке.

 char* t = new char[44]; // allocate a buffer
strcpy(t,s); // populate it
 

Такая обработка строк в стиле C является красным флагом, но это все, что я могу сказать, учитывая эту небольшую информацию.

Ответ №3:

Этот код может оказаться полезным:

 char * strcpy (char * destination, const char * source);
t = strcpy(t, s);
 

Ответ №4:

Вы должны инициализировать переменную t

Сделайте что-нибудь вроде этого:

 char *t = new char[44];
memset(t, 0, 44);

// strlen(t) = 0
 

Комментарии:

1. Или с помощью char* t = new char[44](); , вы можете избавиться от memset.

Ответ №5:

strcpy Функция описывается следующим образом:

 #include <string.h>
char *strcpy(char *dest, const char *src);
 

Функция strcpy() копирует строку, на которую указывает by src (включая завершающий символ «»), в массив, на который указывает by dest .

Итак, если вы пытаетесь заполнить свой недавно выделенный массив, вам следует сделать:

 strcpy(t, s);
 

А не наоборот.