我发布这个作为我的问题的发泄(我会有很多人)。我觉得一次向同一个人询问一个问题会很烦人(说这个人非常忙),所以当我在项目中遇到问题时,我会发布问题。如果你想帮忙,请做,我会非常感激!
注意:这意味着我会经常更新这篇文章。一如既往地非常感谢帮助。
编辑所以,如果我遇到它们,你们是否希望我继续发布不同的问题?当然,在问你们之前我总是做研究,你才华横溢的男女群体只能得到最持久的错误。
我的第一个问题:
我一直收到错误:
此代码的左值作为赋值的左操作数
目的是将前n个字符复制到':'
。例如,如果currentline
为:"LABEL: .long 100"
,则GetLabelName
将返回"LABEL"
。
注意 strncpy
无效。它会在忽略前n个字符后返回剩余的字符,而不是仅返回前n个字符...
以下是导致错误的代码:
char *GetLabelName(char *currentline){
char *labelname[200];
while((((*labelname)++)=(*currentline)++)!=':');
return labelname;
}
我想这个代码有点可疑,但我无法弄清楚是什么。有什么想法吗?
答案 0 :(得分:4)
我认为您尝试做的是将字符串中的所有字符提取/复制到某个点(':'
或NUL)并返回该缓冲区。如果是这种情况,您将需要为新字符串动态分配内存(您无法返回在堆栈上分配的本地缓冲区),您还应该利用函数在<string.h>
中,例如strchr
和memcpy
。
这是另一个工作示例:
#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 ++