如何在 C 中创建一个 "X" 终止的字符串?
How to create a "X" terminated string in C?
我正在尝试创建一个计数器来计算字符串中“?”之前的字符数。我在使用 strcmp 终止 while 循环并以分段错误结束时遇到问题。这是我拥有的:
void printAmount(const char *s)
{
int i = 0;
while ( strcmp(&s[i], "?") != 0 ) {
i++;
}
printf("%i", i);
}
不要为此使用 strcmp
。直接在s
上使用下标运算符即可。
示例:
#include <stdio.h>
void printAmount(const char *s) {
int i = 0;
while (s[i] != '?' && s[i] != '[=10=]') {
i++;
}
printf("%d", i);
}
int main() {
printAmount("Hello?world"); // prints 5
}
或使用strchr
#include <string.h>
void printAmount(const char *s) {
char *f = strchr(s, '?');
if (f) {
printf("%td", f - s);
}
}
strcmp()
比较字符串,而不是字符。因此,如果您输入类似 "123?456"
的内容,您的逻辑将不起作用,因为 "?" != "?456"
。因此,你的 while 循环永远不会终止,你开始使用字符串之外的东西。
void printAmount(const char * s) {
int i = 0;
for (; s[i] != '?' && s[i] != '[=10=]'; i++) {
/* empty */
}
if (s[i] == '?') {
printf("%d",i); // the correct formatting string for integer is %d not %i
}
}
除非您有非常奇怪或特殊的要求,否则正确的解决方案是:
#include <string.h>
char* result = strchr(str, '?');
if(result == NULL) { /* error handling */ }
int characters_before = (int)(result - str);
我正在尝试创建一个计数器来计算字符串中“?”之前的字符数。我在使用 strcmp 终止 while 循环并以分段错误结束时遇到问题。这是我拥有的:
void printAmount(const char *s)
{
int i = 0;
while ( strcmp(&s[i], "?") != 0 ) {
i++;
}
printf("%i", i);
}
不要为此使用 strcmp
。直接在s
上使用下标运算符即可。
示例:
#include <stdio.h>
void printAmount(const char *s) {
int i = 0;
while (s[i] != '?' && s[i] != '[=10=]') {
i++;
}
printf("%d", i);
}
int main() {
printAmount("Hello?world"); // prints 5
}
或使用strchr
#include <string.h>
void printAmount(const char *s) {
char *f = strchr(s, '?');
if (f) {
printf("%td", f - s);
}
}
strcmp()
比较字符串,而不是字符。因此,如果您输入类似 "123?456"
的内容,您的逻辑将不起作用,因为 "?" != "?456"
。因此,你的 while 循环永远不会终止,你开始使用字符串之外的东西。
void printAmount(const char * s) {
int i = 0;
for (; s[i] != '?' && s[i] != '[=10=]'; i++) {
/* empty */
}
if (s[i] == '?') {
printf("%d",i); // the correct formatting string for integer is %d not %i
}
}
除非您有非常奇怪或特殊的要求,否则正确的解决方案是:
#include <string.h>
char* result = strchr(str, '?');
if(result == NULL) { /* error handling */ }
int characters_before = (int)(result - str);