我是C的新手,我遇到了字符串问题.我想要做的是在循环中创建一个像"val1,val2,val3"的字符串.
目前我的代码看起来像:
char tagstr[60] = "";
int k;
int n = 5;
for (k=0; k < n; k++) {
char temp[10] = "";
sprintf(temp, ", val%d", k);
strcat(tagstr, temp);
}
Run Code Online (Sandbox Code Playgroud)
但是tagstr的输出是",val#",其中#是一些长整数值.我猜这里我的指针做错了但是我已经尝试了一切我能想到的但没有成功......任何帮助都会非常感激.
编辑:更多上下文,如果它有帮助:
int tagsClosed = strlen(pch1) - strcspn(pch1, ")");
do {
if (curTag.size > 0) {
// problem section
char tagstr[60] = "";
int k;
for (k = 0; k < 5; k++) {
char temp[10] = "";
sprintf(temp, ", val%i", temp, k);
strcat(tagstr, temp);
}
// This prints out something like ", val-890132840" x 5 (same number)
printf ("String is now: %s\n", tagstr);
}
curTag = *(curTag.parent);
tagsClosed--;
} while (tagsClosed > 0);
Run Code Online (Sandbox Code Playgroud)
curTag是一个结构:
typedef struct Tag {
char * name;
int size; // number of children
int tagnum;
struct Tag* parent;
} Tag;
Run Code Online (Sandbox Code Playgroud)
问题是sprintf(temp, ", val%i", temp, k);将temp字符串的值(实际上是数组中第一个字符的地址)添加到字符串中,并且根本不添加k字符串的值.这应该是sprintf(temp, ", val%i", k);.
您可以提前计算您需要的空间量(包括零终结符):
5+1 + 5+1 + 5+1 + 5+1 + 5+1 + 1 = 31 characters
Run Code Online (Sandbox Code Playgroud)
也; 使用strcat不好(性能),因为你会反复搜索结束,tagstr然后将新字符复制到最后.最好跟踪当前结束tagstr并直接在最后存储下一组字符,没有搜索,没有临时字符串,也没有复制.例如:
void thing(void) {
char tagstr[60];
int pos = 0;
int k;
int n = 5;
for (k=0; k < n; k++) {
pos += sprintf(&tagstr[pos], ", val%d", k);
}
printf ("String is now: %s\n", tagstr);
}
Run Code Online (Sandbox Code Playgroud)