我不知道以下代码有什么问题。我在没有找到太多帮助的情况下仔细阅读了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和地址进行播放,然后无法使用它。
答案 0 :(得分:2)
获取指针的第一个字符,您可以转到*ptr
或ptr[0]
。
你的代码有其他问题,分配给final不会复制,它只是指向最终到另一个位置,在这种情况下你将指向一个堆栈变量,它将会严重失败。
相反,只需strcpy
进入决赛并摆脱“ptr”
答案 1 :(得分:1)
final[0] = ptr[0];
*final = *ptr;
final[0] = *ptr;
*final = ptr[0];
答案 2 :(得分:1)
除了Keith的回答,您还可以通过full_name
一步完成final
到strdup
的分配和复制:
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) ;