c复制ptr的第一个字母

时间:2015-09-12 00:30:51

标签: c pointers

我不知道以下代码有什么问题。我在没有找到太多帮助的情况下仔细阅读了stackoverflow。

char * abbreviate_name( const char * full_name) {

int length = strlen(full_name) + 1;
char * final = malloc(length);
*answer = '\0';
char ptr[51];

// above is where I declare all my variables
strncpy(ptr, full_name, length); // copy full_name because it is a const

// ...

final = &ptr[1]; // this line copies all of ptr when I do a prinf on it

我只是想知道如何获得ptr的第一个字母。 我尝试使用ptrs和地址进行播放,然后无法使用它。

4 个答案:

答案 0 :(得分:2)

获取指针的第一个字符,您可以转到*ptrptr[0]

你的代码有其他问题,分配给final不会复制,它只是指向最终到另一个位置,在这种情况下你将指向一个堆栈变量,它将会严重失败。

相反,只需strcpy进入决赛并摆脱“ptr”

答案 1 :(得分:1)

final[0] = ptr[0];
*final   = *ptr;
final[0] = *ptr;
*final   = ptr[0];

答案 2 :(得分:1)

除了Keith的回答,您还可以通过full_name一步完成finalstrdup的分配和复制:

char *abbreviate_name (const char *full_name) {

    char *final = strdup (full_name);

    ...

strdup会调用malloc来动态分配足以容纳full_name的存储空间。就像你曾经使用malloc一样,你有责任在不再需要时释放内存。

答案 3 :(得分:0)

我可能在黑暗中拍摄并写下一个非常容易低票的答案,但让我开始吧。

可能OP正在寻找一个提供字符串缩写版本的函数,因此字符串中每个给定单词的首字母(full_string)。我认为这是因为char *返回类型和函数名称。

[('a', 45), ('c', 45), ('b', 45)]

如果我理解这个问题是正确的,那么你可能正在寻找

  

的strtok

这是一个用于提取您要找的内容的片段

char * abbreviate_name( const char * full_name) ;