c++: strcpy 不能使用 char 数组

Posted

技术标签:

【中文标题】c++: strcpy 不能使用 char 数组【英文标题】:c++: strcpy not working with char array 【发布时间】:2016-04-06 04:02:00 【问题描述】:

我正在对一组名称进行排序,我的 IDE 给了我“没有匹配的函数来调用‘strcpy’。 以下是我设置的值:

char Names [MaxNames] [MaxCharsPerName + 1];
const int MaxNames          (20);
const int MaxCharsPerName   (15);

这是我的功能

void SortNames (const char Names[][MaxCharsPerName + 1], int NumNames)

int     i;
int     NumElements;
bool    Sorted;
char    Temp; // size 15?

NumElements = NumNames;
do  
    Sorted = true;
    NumElements--;
    for (i = 0; i < NumNames; i++)
        
         
            if(Names[i-1] > Names[i])
                strcpy(Temp, Names[i]);
                strcpy(Names[i], Names[i+1]);
                strcpy(Names[i+1], Temp);

            
        
    
 while (!Sorted);

我必须使用参考吗?

哦,这些在顶部:

包括

 using namespace std;
 #include "Constants.h"
 #include "Functions.h"
 #include <string.h>
 #include <stdio.h>

【问题讨论】:

如果您使用的是 C++,不如将 std::string 用于字符串而不是 char []char [] 是 C 的处理方式。然后参考下面@andreas-dm 的回答。 【参考方案1】:
char Temp; // size 15?

Tempcharstrcpy 需要 char *(编译器会在您的情况下给出编译错误)。

改用char 数组-

char Temp[MaxCharsPerName + 1]; // any desired size but reserve place for '\0' 

然后将其传递给strcpy

【讨论】:

哦,是的。好吧,我是这样设置的,但我得到了同样的错误。 @CalebLawrence 进行更改后您得到同样的错误? 我愿意,是的。它看起来像第一行 strcpy(Temp, Names[i]);工作,但其他人没有。可能是数组的问题。 @CalebLawrence 您的意思是在此处显示的代码的其他部分或在这些调用中。 Names[i-1] 也令人担忧。你应该使用strcmp 来比较你的字符串(现在你只是比较字符串的指针)【参考方案2】:

对一组名称进行排序会更容易:

vector<string> names;
// ... 
sort(begin(names), end(names), less<string>());
for (const auto& name : names) cout << name << '\n';

【讨论】:

以上是关于c++: strcpy 不能使用 char 数组的主要内容,如果未能解决你的问题,请参考以下文章

VS2013 C++中的strcpy用不了,说换成strcpy_s,还是出现错误了。

在 char 指针上使用 strcpy 时程序中止? (在 char 数组上工作正常)

C++里把char转化为string怎么解决

关于strcpy的问题

百战c++

百战c++