Python 如果所有字符串都需要长度或空终止符,那么高级语言如何只使用字符构造字符串?

Python 如果所有字符串都需要长度或空终止符,那么高级语言如何只使用字符构造字符串?,python,c,go,Python,C,Go,所以我写了一些C代码来模拟一种脚本语言。 我遇到了这样一个场景:如果我运行一个函数来导入一个文件,比如说import(“file.c”)我遇到了一个问题,我不一定能使用指针,因为它不是以null结尾的。我还需要给出字符串的长度,如import(“file.c”,5)或使用空终止字符import(“file.c\0”)。我假设使用缓冲区是使用固定大小的方式,例如char file\u name[256],它可能覆盖足够大的文件名。但这就提出了一些关于“更高”级别编程语言(比如Python或Gola

所以我写了一些C代码来模拟一种脚本语言。 我遇到了这样一个场景:如果我运行一个函数来导入一个文件,比如说
import(“file.c”)
我遇到了一个问题,我不一定能使用指针,因为它不是以null结尾的。我还需要给出字符串的长度,如
import(“file.c”,5)
或使用空终止字符
import(“file.c\0”)
。我假设使用缓冲区是使用固定大小的方式,例如
char file\u name[256]
,它可能覆盖足够大的文件名。但这就提出了一些关于“更高”级别编程语言(比如Python或Golang)的有趣问题。因此,从互联网搜索来看,Golong的进口产品是这样的:

import (
    "fmt"
    "math"
)
我假设库被视为字符串,不是吗?Python呢

import pandas as pd
import math
import functools
这些也被视为字符串吗?至少,对我来说,我认为golang的进口产品是。 但让我们完全忘记进口。那就用绳子怎么样? Python的字符串是:

s = "I like Apple Pie"
我看到golang中的字符串定义为:

type _string struct {
    elements *byte // underlying bytes
    len      int   // number of bytes
}
下一段代码是:

const World = "world"
在没有指定len的情况下。有什么好处

golang或一般的“更高级”语言如何使用字符串,而不必指定以null结尾的字符串或带数字的长度?还是我完全错过了什么


我有一些C语言的Python背景,但在今天的大多数编程语言中它似乎非常相似。

Go中的字符串值是指向字节和长度的指针。这是:

对于像
“world”
这样的字符串文本,编译器计算字节数以设置长度。该文本在运行时由
StringHeader{Data:pointerToBytesWorld,Len:5}
表示

对于通过切片表达式的字符串值,长度在切片操作数中是隐式的:

 s := "Hello"
 s = s[1:4]   // length is 4 - 1 = 3
字符串转换采用操作数的长度:

 b := []byte{'F', 'o', 'p'}
 s = string(b)  // length is 3, same as len(b)

不编写字符串长度或字符串文本的null终止字符并不意味着不能自动完成:编译器可以这样做(因为它在编译时知道字符串长度),而且很可能会这样做

例如:

空字符('\0',L'\0',char16\u t()等)始终为空 附加到字符串文字:因此,字符串文字“Hello”是 常量字符[6],包含字符“H”、“e”、“l”、“l”、“o”和 “\0”

下面是一个小型C程序,它显示将空字符附加到字符串文字:

#include <stdio.h>
#include <string.h>

int main()
{
   char *p="hello";
   int i;

   i = 0;   
   while (p[i] != '\0')
   {
        printf("%c ", p[i]);
        i++;
   }
   printf("\nstrlen(p)=%ld\n", strlen(p));

   return 0;
}
您还可以在调试模式下使用以下命令编译程序:

gcc -g -o hello -Wall -pedantic -Wextra hello.c
并与gdb检查:

    gdb hello
    ...

    (gdb) b main
    Breakpoint 1 at 0x400585: file hello.c, line 6.
    (gdb) r
    Starting program: /home/pifor/c/hello 
    Breakpoint 1, main () at hello.c:6  
    6      char *p="hello";
    (gdb) n
    9      i = 0;   
    (gdb) print *(p+5)
    $7 = 0 '\000'
    (gdb) print *(p+4)
    $8 = 111 'o' 
    (gdb) print *p
    $10 = 104 'h'

你能澄清你的问题吗?您的标题正确地表示“字符串需要长度或[…]终止符”。Golang示例结构/类型有一个长度,源代码
“world”
显然有一个开始和结束符号。好的,明白了,所以nul终止符是在后台追加的。我想大多数语言都是在后台这样做的,它们要么获取长度,要么在用户不知道的情况下追加空终止符。你有没有一个C代码示例来演示如何自动追加空终止符。看起来链接显示了c++我在回答中添加了一个c示例。好的,我明白了,所以golang正在幕后发送长度。很有趣,谢谢!
gcc -g -o hello -Wall -pedantic -Wextra hello.c
    gdb hello
    ...

    (gdb) b main
    Breakpoint 1 at 0x400585: file hello.c, line 6.
    (gdb) r
    Starting program: /home/pifor/c/hello 
    Breakpoint 1, main () at hello.c:6  
    6      char *p="hello";
    (gdb) n
    9      i = 0;   
    (gdb) print *(p+5)
    $7 = 0 '\000'
    (gdb) print *(p+4)
    $8 = 111 'o' 
    (gdb) print *p
    $10 = 104 'h'