我正在尝试编写代码来反转字符串(我只是想在C编程和指针操作方面做得更好),但我无法弄清楚为什么我会遇到分段错误:
#include <string.h>
void reverse(char *s);
int main() {
char* s = "teststring";
reverse(s);
return 0;
}
void reverse(char *s) {
int i, j;
char temp;
for (i=0,j = (strlen(s)-1); i < j; i++, j--) {
temp = *(s+i); //line 1
*(s+i) = *(s+j); //line 2
*(s+j) = temp; //line 3
}
}
Run Code Online (Sandbox Code Playgroud)
它是第2行和第3行导致分段错误.我知道可能有更好的方法来做到这一点,但我有兴趣找出我的代码中特别导致分段错误的内容.
更新:我已根据要求包含了调用函数.
看起来在Python中,list += x适用于任何可迭代的x:
In [6]: l = []
In [7]: l += [1]
In [8]: l += (2, 3)
In [9]: l += xrange(5)
In [10]: l
Out[10]: [1, 2, 3, 0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
这种行为记录在哪里吗?
我想知道在打印东西时如何删除额外的空格.
就像我这样做:
print 'Value is "', value, '"'
Run Code Online (Sandbox Code Playgroud)
输出将是:
Value is " 42 "
Run Code Online (Sandbox Code Playgroud)
但我想要:
Value is "42"
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
现在已经接受了PEP 572,Python 3.8注定要有赋值表达式,所以我们可以使用赋值表达式with,即
with (f := open('file.txt')):
for l in f:
print(f)
Run Code Online (Sandbox Code Playgroud)
代替
with open('file.txt') as f:
for l in f:
print(f)
Run Code Online (Sandbox Code Playgroud)
它会像以前一样工作.
as关键字与withPython 3.8中的语句有什么用?这不是针对Python的禅宗:"应该有一个 - 最好只有一个 - 显而易见的方法." ?
当最初提出的功能,它并没有明确规定是否赋值表达式应中括号with和
with f := open('file.txt'):
for l in f:
print(f)
Run Code Online (Sandbox Code Playgroud)
可以工作.但是,在Python 3.8a0中,
with f := open('file.txt'):
for l in f:
print(f)
Run Code Online (Sandbox Code Playgroud)
会引发
File "<stdin>", line 1
with f := open('file.txt'):
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
但括号表达式有效.
我正在尝试自己学习C,我有点困惑getchar和putchar:
#include <stdio.h>
int main(void)
{
char c;
printf("Enter characters : ");
while((c = getchar()) != EOF){
putchar(c);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>
int main(void)
{
int c;
printf("Enter characters : ");
while((c = getchar()) != EOF){
putchar(c);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C库函数int putchar(int c)将参数char指定的字符(unsigned char)写入stdout.
C库函数int getchar(void)从stdin获取一个字符(一个unsigned char).这相当于以stdin作为参数的getc.
这是否意味着putchar()同时接受int和char或其中一方以及getchar()我们应该使用一个int或char?
char* a="dsa" "qwe";
printf("%s", a);
Run Code Online (Sandbox Code Playgroud)
输出:dsaqwe
我的问题是为什么这件事有效.如果我在两个字符串文字之间给出一个空格或什么都没有,它会连接字符串文字.
这是怎么回事?
我有一堆.txt,Notepad ++说(在它的下拉"编码"菜单中)是"ANSI".
它们中有德文字符,[äöüß],在Notepad ++中显示正常.
但是当我File.read 'this is a German text example.txt'这些时,他们并没有出现在irb中.
那么有谁知道我应该给出什么样的论据Encoding.default_external=?
(我假设这是解决方案,对吗?)
当'utf-8'或时'cp850',它将"äöüß"中的"ANSI"文件读作"\ xE4\xF6\xFC\xDF"...
(请不要犹豫,在你的答案中提到显而易见的"明显"事物;我几乎和你一样新生,并且仍然知道这个问题就足够了.)
我想按字典顺序将字符串排序到列表中
str='aAaBbcCdE'
Run Code Online (Sandbox Code Playgroud)
至
['A','a','a','B','b','C','c','d','E']
Run Code Online (Sandbox Code Playgroud)
但sorted()给我这个输出:
['A','B','C','E','a','a','b','c','d']
Run Code Online (Sandbox Code Playgroud)
如何按字典顺序排序?
我是一个操作系统爱好者,我的内核运行在80486+,并且已经支持虚拟内存.
从80386开始,英特尔的x86处理器系列及其各种克隆通过分页支持虚拟内存.众所周知,当设置PG位时CR0,处理器使用虚拟地址转换.然后,CR3寄存器指向顶级页面目录,即用于将虚拟地址映射到物理地址的2-4级页表结构的根.
处理器不会为生成的每个虚拟地址查询这些表,而是将它们缓存在名为Translation Lookaside Buffer或TLB的结构中.但是,当对页表进行更改时,需要刷新TLB.在80386处理器上,此刷新将通过使用顶级页面目录地址或任务切换重新加载(MOV)来完成CR3.这应该无条件地刷新所有TLB条目.据我所知,虚拟内存系统在任何更改后总是重新加载CR3是完全有效的.
这是浪费,因为TLB现在会抛出完全好的条目,因此在80486处理器INVLPG中引入了指令.INVLPG将使与源操作数地址匹配的TLB条目无效.
然而,从Pentium Pro开始,我们还拥有全局页面,这些页面不会被移动到CR3任务切换; 和AMD x86-64 ISA表示某些高级页面表结构可能会被高速缓存而不会失效INVLPG.为了获得每个ISA所需内容和不需要内容的连贯图片,我们真的需要为80年代以来发布的大量ISA下载1000页的数据表来阅读其中的几页,即使这样,文档似乎也是如此对TLB失效特别模糊,如果TLB未正确无效,会发生什么.
为简单起见,可以假设我们正在讨论单处理器系统.此外,可以假设在更改页面结构后不需要任务切换.(因此INVLPG总是被认为至少是重新加载CR3寄存器的好选择).
基本假设是CR3每次更改页面表和页面目录后都需要重新加载,这样的系统是正确的.但是,如果想要避免不必要地冲刷TLB,则需要回答2个问题:
如果INVLPGISA支持,经过哪种更改可以安全地使用它而不是重新加载CR3?例如"如果一个取消映射一个页面框架(将相应的表条目设置为不存在),则可以始终使用INVLPG"?
在不触及CR3或执行的情况下,可以对表和目录进行哪些更改INVLPG?例如"如果一个页面根本没有映射(不存在),那么就可Present=1以为它编写一个PTE 而不用刷新TLB"?
即使在阅读了大量的ISA文档以及与INVLPGStack Overflow 相关的所有内容之后,我也不确定我在那里提供的任何一个例子.事实上,一篇值得注意的帖子马上说:"我不知道你何时应该使用它,什么时候不应该使用它." 因此,您可以提供任何特定的,正确的示例,最好是文档,以及您可以给出的IA32或x86-64.
我想在梦幻般的ConEmu-Maximus5控制台中获得256种颜色.
更新:现在它只显示8种颜色.我知道因为'$ tput colors'的输出是'8'
我按照说明操作并激活:
我不知道如何处理' 检查是否缓冲/滑动."
"C:\Program Files\ConEmu\ConEmu64.exe" /cmd ""C:\cygwin\bin\bash.exe" --login -i"
function prompt {
local RED="\[\033[0;31m\]"
local GREEN="\[\033[0;32m\]"
local COOLRED="\e[38;5;173m"
local COOLGREEN="\e[38;5;113m"
PS1="$COOLRED\u@\h $LIGHT_COOLGREEN\$PWD \[\e[0m\] > "
}
prompt
我有一些屏幕截图:

正如您所看到的,命令提示看起来非常奢侈,因为它不喜欢256色设置.如果我用红色和绿色替换变量COOLRED和COOLGREEN,那么看起来没问题,但它不是256色.
更多设置截图:

最后一次拍摄它是cygwin的薄荷.一切都很好.支持全256色.这是一个耻辱的薄荷没有标签.这主要是我为什么要搬到ConEmu的原因.

非常感谢您的帮助!
python ×4
c ×3
string ×2
256color ×1
ansi-colors ×1
codepages ×1
conemu ×1
containers ×1
diacritics ×1
lambda ×1
notepad++ ×1
operators ×1
paging ×1
python-2.x ×1
python-3.8 ×1
python-3.x ×1
python-assignment-expression ×1
ruby ×1
sorting ×1
terminal ×1
tlb ×1
whitespace ×1
x86 ×1
x86-64 ×1