提取字符串的第一部分

时间:2012-01-05 04:54:36

标签: c

我发布这个作为我的问题的发泄(我会有很多人)。我觉得一次向同一个人询问一个问题会很烦人(说这个人非常忙),所以当我在项目中遇到问题时,我会发布问题。如果你想帮忙,请做,我会非常感激!

注意:这意味着我会经常更新这篇文章。一如既往地非常感谢帮助。

编辑所以,如果我遇到它们,你们是否希望我继续发布不同的问题?当然,在问你们之前我总是做研究,你才华横溢的男女群体只能得到最持久的错误。

我的第一个问题:

我一直收到错误:

  

左值作为赋值的左操作数

此代码的

目的是将前n个字符复制到':'。例如,如果currentline为:"LABEL: .long 100",则GetLabelName将返回"LABEL"

注意 strncpy无效。它会在忽略前n个字符后返回剩余的字符,而不是仅返回前n个字符...

以下是导致错误的代码:

char *GetLabelName(char *currentline){
   char *labelname[200];
   while((((*labelname)++)=(*currentline)++)!=':');
   return labelname;
}

我想这个代码有点可疑,但我无法弄清楚是什么。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

我认为您尝试做的是将字符串中的所有字符提取/复制到某个点(':'或NUL)并返回该缓冲区。如果是这种情况,您将需要为新字符串动态分配内存(您无法返回在堆栈上分配的本地缓冲区),您还应该利用函数在<string.h>中,例如strchrmemcpy

这是另一个工作示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *extract_string(char *str, char delim)
{
   size_t len;
   char *new_str;
   char *delim_pos = strchr(str, delim);

   /* new string is the length from the start of the old string to the
    * delimiter, or if it doesn't exist, a copy of the whole string */
   if (delim_pos == NULL)
      return strdup(str);

   len = delim_pos - str;
   new_str = malloc(len + 1);
   memcpy(new_str, str, len);
   new_str[len] = '\0'; /* NUL terminate the new string */

   return new_str;
}

int main(void)
{
   char *extracted1 = extract_string("some:string", ':');
   char *extracted2 = extract_string("no delimiter", ':');

   puts(extracted1);
   puts(extracted2);

   /* free the dynamically allocated buffers */
   free(extracted1);
   free(extracted2);

   return 0;
}

输出:

some
no delimiter

如果您在找不到分隔符时不想复制,则可以选择返回NULL

或者,如果您不介意修改初始字符串,可以使用strtok提取令牌。

答案 1 :(得分:0)

问题是(* labelname)++。您正在递增labelname指向的值,同时为其指定当前行指向的值。如果要增加指针,请使用* labelname ++和* currentline ++