- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个小函数来修剪字符串中的左侧空格,但我无法正确执行。在此版本中,我收到以下错误:
bus error: 10
有人可以向我解释一下我做错了什么吗?我并不是在寻找替代代码,而是想了解代码中的错误:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void trim_string(char *);
int main(int argc, char *argv[]) {
char *temp = " I struggle with strings in C.\n";
trim_string(temp);
printf("%s", temp);
return 0;
}
void trim_string(char *string) {
char *string_trimmed = "";
int i=0, j=0;
while (isblank(string[i])) {
i++;
}
while (string[i] != '\0') {
string_trimmed[j] = string[i];
i++;
j++;
}
string_trimmed[j] = '\0';
strcpy(string, string_trimmed);
}
我现在找到了一个解决方案,如下所示。但我仍然不太清楚我首先做错了什么:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_LENGTH 100
void trim_string(char [MAX_LENGTH]);
int main(int argc, char *argv[]) {
char temp[MAX_LENGTH] = " I struggle with strings in C.\n";
trim_string(temp);
printf("%s", temp);
return 0;
}
void trim_string(char string[MAX_LENGTH]) {
char string_trimmed[MAX_LENGTH];
int i=0, j=0;
while (isblank(string[i])) {
i++;
}
while (string[i] != '\0') {
string_trimmed[j] = string[i];
i++;
j++;
}
string_trimmed[j] = '\0';
printf("c\n");
strcpy(string, string_trimmed);
}
最佳答案
string
和 string_trimmed
都指向字符串文字,在 main
中:
char *temp = " I struggle with strings in C.\n";
^
|
This is a string literal
temp
指向字符串文字,并且标准规定您不允许修改它们。
在函数 trim_string
中,您正在修改它们,即 undefined behavior尽管任何事情都可能发生,但总线错误是其中一种可能的结果。
string_trimmed
要么需要是这样的数组:
char string_trimmed[n] ;
其中n
是使用strlen(string)
输入的大小可能有意义,或者通过您需要的malloc
动态分配在函数结束时释放。对于 main
的输入也是如此,这可以作为替代:
char temp[] = " I struggle with strings in C.\n";
为了完整起见,C99 标准草案 6.4.5
字符串文字 段落 6 说(强调我的):
It is unspecified whether these arrays are distinct provided their elements have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.
关于c - 与弦作斗争。我的功能出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20339301/
例如,如果我有 >>> name = f"{os.path.splitext(os.path.basename('/some/long/path/I/donot/need/to/some/config
我正在学习教程并试图了解此处发生的情况。所以我们首先将“消息”编码为字节,然后取其长度并将其向左对齐(?)10,然后对整个内容进行编码? 我试图在我的设备中使用这个部分,它不理解 f-strings,
我敢肯定这个问题被问了很多,但我只是想确保没有更好的方法来做到这一点。 基本上,我有一个 const char* 指向一个以 null 结尾的 C 字符串。我有另一个函数,它需要一个指向具有相同字符的
我使用的是最新的稳定版 PyCharm 2016.1.4 和 Python 3.6a1。每当我使用“f-strings”(PEP-498)时,PyCharm 都会提示 f 是一个 Unresolved
我发现了一些显然是为 python 3.6 设计的代码。 出于某种原因,我需要在 python 3.5 环境中运行该代码。据推测,这两个版本应该是向后兼容的。然而,原始代码在 f-strings 中滥
我是一名优秀的程序员,十分优秀!